2015-04-14 59 views
1

我有一個查詢匹配兩個表之間的6個字段並返回匹配。該查詢使用內部連接。我一直在測試INTERSECT來取代這個。因此,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

你對這兩張桌子有什麼樣的索引?我猜ID是主鍵?執行計劃在永久需要時顯示什麼? –

+0

這些ID是主鍵,它們是當前表上唯一的索引。我可以告訴我當前的嘗試是不正確的(返回的行太多),因此我首先查找正確的查詢。我試圖破譯執行計劃,但我不是那裏的專家。 – user2178080

+1

您能否顯示您正在執行的確切的SQL需要這麼長時間? –

回答

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 

要優化你需要設置使用的所有列的索引上查詢在INNER JOINON條款中。

相關問題