我正在链接两个表,我希望两个表中的匹配行显示为输出表中的单独行。
示例:
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
答案 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
在上面的示例中,我使用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
,可选地包括重复行。