[英]SQL Using inner query in left join
I have the below two tables ONE & TWO 我有下面的两个表一和二
ONE TWO
ID ID CODE
----- ---------
1 1 1
2 1 2
3 2 1
4 3 1
5 3 2
3 3
ID CODE
----------
1 2
2 1
3 3
4 NULL
5 NULL
I used the below query but it is throwing the error " An ON clause associated with a JOIN operator or in a MERGE statement is not valid. " 我使用了以下查询,但引发了错误“ 与JOIN运算符或MERGE语句关联的ON子句无效。 ”
SELECT A.ID
,B.CODE
FROM ONE A
LEFT JOIN
TWO B
ON A.ID = B.ID
AND B.CODE = (
SELECT
MAX(Z.CODE)
FROM TWO Z
WHERE Z.ID = A.ID
)
You can do this with a join and aggregation (if I understand the logic correctly): 您可以使用联接和聚合来完成此操作(如果我正确理解了逻辑):
select ONE.id, max(TWO.CODE)
from ONE left outer join
TWO
on ONE.id = TWO.id
group by ONE.id;
Since you have tagged also SQL-Server, you can use ROW_NUMBER
: 由于还标记了SQL Server,因此可以使用
ROW_NUMBER
:
WITH CTE AS
(
SELECT ONE.ID, TWO.CODE,
RN = ROW_NUMBER() OVER (PARTITION BY ONE.ID ORDER BY TWO.CODE DESC)
FROM ONE LEFT OUTER JOIN TWO
ON ONE.ID=TWO.ID
)
SELECT ID, CODE FROM CTE WHERE RN = 1
SELECT A.ID
,B.CODE
FROM ONE A
LEFT outer JOIN
(select id,max(code) CODE from two group by id) B
ON A.ID = B.ID
I believe this is what you are looking for.... 我相信这就是您要寻找的...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.