SQL - 选择仅存在于多个表中的多个记录

时间:2014-03-23 13:10:18

标签: sql sql-server

我有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会回来!

必填结果:

仅显示在所有表格中的值(要插入新表格中!)

非常感谢!

2 个答案:

答案 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)