我有20多个表,每个表包含20,000多条记录,我希望只查询所有表中存在的记录值。 我不确定与UNION一起是否有不同的方法?
示例:
Table_A: 1,2,6,9,12,15
Table_B: 2,6,11,15,18,26
Table_C: 6,12,14,15,23,24
Table_D: 3,4,5,6,8,15
结果:只有6& 15会回来!
必填结果:
仅显示在所有表格中的值(要插入新表格中!)
非常感谢!
答案 0 :(得分:2)
正确的表达方式是intersect
,而不是union
:
select a.* from table_a a
intersect
select b.* from table_b b
intersect
select c.* from table_c c
intersect
select d.* from table_d d;
不经常使用,但正是你想要的。并且,它适用于多列。
答案 1 :(得分:1)
SELECT *
FROM TABLE_A A INNER JOIN TABLE_B B
ON A.Column_R = B.Column_R
INNER JOIN TABLE_C C
ON B.Column_R = C.Column_R
INNER JOIN TABLE_D D
ON C.Column_R = D.Column_R
Column_R将是这些表之间的引用列。
或者另一种方法可能是使用这样的EXISTS运算符......
SELECT A.*
FROM TABLE_A A
WHERE
EXISTS (SELECT 1
FROM TABLE_B
WHERE Column_R = A.Column_R)
AND EXISTS (SELECT 1
FROM TABLE_C
WHERE Column_R = A.Column_R)
AND EXISTS (SELECT 1
FROM TABLE_D
WHERE Column_R = A.Column_R)