我有一個包含2個字段(名稱,興趣)的表,我想找到所有具有相同興趣的對,並刪除所有重複項和鏡像對。從SQL中刪除鏡像對加入
我能找到的所有對,並與下面的SQL語句刪除重複:
SELECT P1.name AS name1, P2.name AS name2, P1.interest
FROM Table AS P1, Table AS P2
WHERE P1.interest = P2.interest AND P1.name <> P2.name;
但我不知道如何刪除鏡像對,即:
"wil","ben","databases"
"ben","wil","databases"
我試圖讓上面的語句成爲一個叫Matches的視圖,並嘗試了下面的查詢:
SELECT * FROM Matches
WHERE name2 <> (select name1 from Matches);
但它不會刪除所有鏡像對。
@wilco,從性能甚至查詢計劃中使用ANSII連接與笛卡爾產品無關。不同之處在於可維護性,但它非常主觀。見http://www.orafaq.com/node/2618。就性能而言,它將取決於您正在使用的RDBMS。有些人可能會將其作爲子查詢執行,在N1中每行執行一次,而不是實現一個視圖並對該視圖執行映射。 – Mitch 2013-02-27 05:58:50
@wilco,把一些數字加入Subquery vs Join,看看這個URL:http://jahaines.blogspot.com/2009/06/correlated-sub-queries-for-good-or-evil.html它討論了對SQL Server的影響具體並概述了相關子查詢的危險性。 – Mitch 2013-02-27 06:02:08
謝謝,米奇!我真的很感激額外的信息 – wilco 2013-02-27 06:26:48