INTERSECT结果的其他字段

时间:2015-04-14 18:48:05

标签: sql-server sql-server-2012

我有一个查询,它匹配两个表之间的6个字段并返回匹配项。此查询使用内部联接。我一直在测试INTERSECT来取代它。因此,

SELECT Field1, Field2, Field3,...,Field6
FROM TableA
INTERSECT
SELECT Field1, Field2, Field3,...,Field6
FROM TableB

但是,我想将TableA.ID和TableB.ID添加到结果中,并且无法将其写入查询不会永远占用的位置(相对于原始查询)。有什么想法吗?

更新 遗憾的是,当第一个问题是如何正确编写查询时,我添加了关于性能的评论。正如您所看到的,我认为主要问题是我无法改进的非常糟糕和不正确的查询结构。我的尝试:

SELECT a.ID, b.ID    
FROM TableA a
INNER JOIN 
(
  SELECT Field1, Field2, Field3,...,Field6
  FROM TableA
  INTERSECT
  SELECT Field1, Field2, Field3,...,Field6
  FROM TableB
) Dupes ON
(
  a.Field1 = Dupes.Field1 and
  ...
  a.Field6 = Dupes.Field6
)
INNER JOIN TableB b
(
  b.Field1 = Dupes.Field1 and
  ...
  b.Field6 = Dupes.Field6
)

1 个答案:

答案 0 :(得分:2)

所有6个字段上的简单INNER JOIN将返回具有公共字段值的两个表中的所有记录:

SELECT A.ID, B.ID, A.Field1, A.Field2, A.Field3, A.Field4, 
       A.Field5, A.Field6
FROM TableA AS A
INNER JOIN TableB AS B 
ON A.Field1 = B.Field1 AND A.Field2 = B.Field2 AND A.Field3 = B.Field3 AND 
   A.Field4 = B.Field4 AND A.Field5 = B.Field5 AND A.Field6 = B.Field6

要优化上述查询,您需要在ON的{​​{1}}子句中使用的所有列上设置索引。