繁体   English   中英

SQL左外部联接到右表的最小值

[英]SQL left outer join to a min value of right table

我有两个表,可以说table1table2

 table1 || table2
--------||-------------
 col1   || col1 | col2 
--------||------|------
 a      || a    | 4    
 b      || a    | 2    
 c      || a    | 5    
 d      || b    | 1
        || b    | 3
        || d    | 6

使用SELECT table1.col1, table2.col2 FROM table1 LEFT OUTER JOIN table2 ON table1.col1 = table2.col1我得到以下信息:

 table1.col1 | table2.col2
-------------|-------------
 a           | 4           
 a           | 2           
 a           | 5           
 b           | 1           
 b           | 3           
 c           | NULL           
 d           | 6

这怎么可能做到这一点(只得到最低的table2.col2让没有进入table1.col1不止一次):

 table1.col1 | table2.col2
-------------|-------------
 a           | 2           
 b           | 1           
 c           | NULL           
 d           | 6

还是错误的方法?

您需要使用MIN

SELECT
    t1.col1,
    MIN(t2.col2) AS col2
FROM table1 t1
LEFT JOIN table2 t2
    ON t2.col1 = t1.col1
GROUP BY t1.col1

SQL小提琴

替代解决方案,使用相关子查询:

select col1, (select min(col2) from table2 t2 where t2.col1 = t1.col1)
from table1 t1

如果table2有更多列,则可能要使用APPLY运算符:

SELECT * FROM table1 
OUTER APPLY(SELECT TOP 1 * FROM table2 
            WHERE table1.col1 = table2.col1 ORDER BY table2.col2)oa

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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