简体   繁体   English

SQL在左联接中使用内部查询

[英]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

Output required 需要输出

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

DEMO 演示

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM