我有一个查询,它匹配两个表之间的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
)
答案 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}}子句中使用的所有列上设置索引。