SQL将外连接保留为右表的最小值

时间:2015-11-06 07:34:50

标签: sql sql-server join

我有两张桌子,比方说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

或者这是一种错误的做法?

3 个答案:

答案 0 :(得分:3)

您需要使用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 Fiddle

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

如果Category中有更多列,您可能希望使用table2运算符:

APPLY