从2个表中选择两个匹配的行

时间:2014-09-15 14:54:53

标签: sql

我正在链接两个表,我希望两个表中的匹配行显示为输出表中的单独行。

示例:

Table 1
1   AAA
2   BBB
3   CCC
4   DDD
5   EEE

表2;

2   WWW
4   XXX
5   YYY
6   ZZZ
7   UUU

输出:

2   BBB
2   WWW
4   DDD
4   XXX
5   EEE
5   YYY

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点(将两个集合合为一个),但首先想到的是使用union语句:

SELECT Column1, Column2 
FROM Table1 
WHERE Column1 IN (SELECT Column1 FROM Table2)

UNION ALL -- union all returns all rows including duplicates
          -- union without all returns all but no duplicates

SELECT Column1, Column2 
FROM Table2
WHERE Column1 IN (SELECT Column1 FROM Table1)
ORDER BY Column1, Column2

Sample SQL Fiddle

在上面的示例中,我使用IN运算符和子查询来确定每个集合中应返回哪些行;另一个可能性能更好的选项是使用连接来限制每个集合的成员,如下所示:

SELECT Column1, Column2 
FROM Table1 
INNER JOIN Table2 ON Table1.Column1 = Table2.Column1

UNION ALL

SELECT Column1, Column2 
FROM Table2
INNER JOIN Table1 ON Table1.Column1 = Table2.Column1

ORDER BY Column1, Column2

union语句的一般概念是你形成两个相似的(因为它们具有相同数据类型的相同列)集合,然后使用union运算符将它们合并为一,通过向运营商添加all,可选地包括重复行。