[英]sql-left-outer-join-with rows-based on column value from right table
[英]SQL left outer join to a min value of right table
我有两个表,可以说table1
和table2
。
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
替代解决方案,使用相关子查询:
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.