2013-02-06 52 views
1

我有两个表有一对多的关系。我想编写一个查询,它从表中输出所有记录的一条记录和只有一条记录的表中有多条记录的查询。写一个子选择查询

因此,具有多个记录的表格显示最多的记录。如果有相同的事件,那么它将按升序排列并显示第一条记录。

表1

Col1 Col2 Col3 
a1  1 4 
a2  2 5 
a3  3 6 

表2

Col1 Col4 
a1  10 
a1  11 
a1  22 
a1  11 
a2  10 
a2  11 
a3  19 
a3  22 
a3  22 
a3  23 

查询输出:

Col1 Col2 Col3 Col4 
a1  1 4 11 
a2  2 5 10 
a3  3 6 22 

希望我清楚。

回答

1

首先,您需要使用group和min()从table2中获取最小数字,然后加入到table1以获取所需的列。我使用了左连接,因为我假设table2中可能没有匹配,但如果table2中总是有一个或多个对应记录,则可以将其更改为INNER JOIN

SELECT a.col1, a.col2, a.col3, b.col4 
FROM table1 a 
     LEFT JOIN (
        SELECT col1, col4 = MIN(col4) 
        FROM table2 
        GROUP BY col1 
        ) b 
      ON a.col1 = b.col1