Sql 编写一个子选择查询
我有两张一对多关系的桌子。我想写一个查询,从一条记录的表中输出所有记录,从多条记录的表中只输出一条记录 因此,具有多条记录的表中,第一条记录显示的是出现次数最多的记录。如果出现的次数相等,则它将按升序排序并显示第一条记录 表1Sql 编写一个子选择查询,sql,sql-server-2008,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 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
希望我能说清楚。首先需要使用group by和min()从表2中获得最小的数字,然后加入表1以获得所需的列。我使用了左连接,因为我假设表2中可能没有匹配项,但如果表2中始终有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
首先需要使用group by和min()从表2中获得最小的数字,然后加入表1以获得所需的列。我使用了左连接,因为我假设表2中可能没有匹配项,但如果表2中始终有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