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

希望我说清楚了。

4

1 回答 1

1

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

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
于 2013-02-06T17:04:12.530 回答