我在想,如果有一個自子查詢轉換爲自加入 這裏的方式是自子查詢轉換自子查詢到自加入
SELECT a,
b
FROM c AS t1
WHERE (b IN (SELECT b
FROM c AS t2
WHERE (t1.b = b)
AND (t1.e <> e)))
我在想,如果有一個自子查詢轉換爲自加入 這裏的方式是自子查詢轉換自子查詢到自加入
SELECT a,
b
FROM c AS t1
WHERE (b IN (SELECT b
FROM c AS t2
WHERE (t1.b = b)
AND (t1.e <> e)))
如果你只想找到一個副本會EXIST
可能會更快:如果你想加入與每個記錄
SELECT a,b FROM c WHERE EXISTS(SELECT NULL FROM c c2 WHERE c2.b=c.b AND c2.e<>c.e)
其複製但只有一次,每個記錄:
select t1.a
, t1.b
, t1.e as t1e
, t2.e as t2e
from c as t1
inner join c as t2
on t1.b = t2.b
and t1.e > t2.e
(請注意,我用的>
代替<>
)
'IN'和'EXISTS'可能會給出相同的計劃。 – 2012-03-18 21:58:05
SELECT t1.a, t2.b
FROM c as t1
join c as t2 on t1.b=t2.b
WHERE t1.e <> t2.e
select t1.a
, t1.b
from c as t1
join c as t2
on t1.b = t2.b
and t1.e <> t2.e
由於e
是主鍵處理這個的另一種方式是
SELECT a,
b
FROM (SELECT a,
b,
COUNT(*) OVER (PARTITION BY b) AS Cnt
FROM c) T1
WHERE Cnt > 1
你的子查詢甚至在幹什麼?看起來你可以擺脫它... – jle 2012-03-18 21:24:43
它檢查是否在表中的東西具有相同的值b – 2012-03-18 21:27:54
和e是用於區分事物的主鍵 – 2012-03-18 21:30:24