2015-11-06 94 views
0

我有两个表,可以说table1table2SQL左外连接到右表的最小值

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 

还是这是一个错误的方法?

+0

使用**组**和** min ** –

+0

MySQL和/或SQL Server? (不要标记不涉及的产品。) – jarlh

回答

2

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

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

这就是我正在寻找的! – mamiu

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

+0

谢谢,我试过了,但总是得到这样的消息:“列在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中”。 – mamiu

+2

@gummiflummi您必须选择更多列。在这种情况下,将其他列放在“GROUP BY”中。 –

+0

或尝试相关的子查询。当大量的列可能更容易处理。 – jarlh

0

如果有table2更多列,你可能要使用APPLY运营商:

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