写一个子选择查询

时间:2013-02-06 16:59:38

标签: sql sql-server-2008

我有两张一对多的关系表。我想编写一个查询,该查询从表中输出所有记录,其中包含一条记录,而且只有一条记录具有多条记录。

因此,具有许多记录的表首先显示最多发生的记录。如果出现相同的情况,那么它将按升序排序并显示第一条记录。

表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 个答案:

答案 0 :(得分:1)

首先,您需要使用group by和min()来获取table2中的最小数字,然后加入table1以获取所需的列。我使用左连接,因为我假设table2中可能没有匹配,但如果table2中总有1个或更多相应记录,则可以将其更改为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