我有這樣一個表(基本的例子,不是真實的東西):查找具有不匹配的值而沒有大的自連接的行集?
FKEY | NAME | ATTRIBUTE_X
--------------------------
1 '...' 42
1 '...' 42
1 '...' 42
2 '...' 7
2 '...' 7
5 '...' 42
5 '...' 42
5 '...' 42
5 '...' 42
6 '...' 300
6 '...' 300
....
凡 - 正常 - 對於每一個給定的FKEY值attribute_x的都是相同的。 (在我的真實數據中,我計算表中某些列的attribute_x,並且此屬性對於所有具有相同fkey的行都必須相同。
現在我有一些行,此屬性不適用。搜索整個表找到所有FKEYs不匹配attribute_x值
例:
--------------------------
145678973 '...' 23
145678973 '...' 22 // Error, should also be 23
145678973 '...' 23
我幼稚的做法是:
SELECT distinct(TX1.FKEY)
FROM TABLEX TX1, TABLEX TX2
WHERE TX1.FKEY=TX2.FKEY
AND TX1.ATTRIBUTE_X <> TX2.ATTRIBUTE_X
;
但隨着我的真實數據沒有完成(我運行了臨時表空間,在DBA將臨時表空間增加到20 GIG後,查詢運行了幾個小時,然後保留)。
通常,是否有更高效查詢這個?
我有PL/SQL一個解決方案,我只是在由FKEY排序的表圈,如果我找到一個不同的attribute_x對其中FKEY保持不變,最後取出的記錄,我發現了一個錯誤的fkey。
但是,這似乎哦,如此原始:-)有沒有一個有效的純粹的SQL解決方案?
我接受此答案而不是[Helena's](http://stackoverflow.com/q/8260067/321013),因爲此版本也適用於非數字'attribute_x'。 –
注意:這個版本和MAX <> MIN版本的實際數據的自動跟蹤成本完全相同:'17518' :-) –