查詢:如何刪除重複記錄
Select table_c.id_number, table_c.name, table_s.site_name,table_co.Contract_name
FROM table_c , table_s, table_m, table_o, table_a, table_con
WHERE
table_s.objid = table_c.sobjid
AND table_m.cobjid (+) = table_c.objid
AND table_o.objid (+) = table_m.olobjid
AND table_a.objid (+) = table_o.aobjid
AND table_co.objid (+) = table_a.conobjid;
這裏我有6張桌子。 table_c和table_s有一個2的關係。有可能對於1個table_o記錄,我們可以有2個table_c記錄,也可能沒有記錄。因爲我需要在SELECT和Table_c和table_s表中使用table_co值,所以我在所有表中使用了省略join table_c-> table_m- > table_o-> table_a-> table_co。
現在運行此查詢它給了我重複的記錄。我在table_c中有數百萬條記錄,所以如果我使用distinct或Union ALL刪除重複記錄,我的查詢需要很長時間,這是不可接受的解決方案。
我可以以這樣的方式糾正這個查詢,它給我獨特的記錄沒有性能問題。
請注意,這個查詢是外部系統用來獲取數據的sql視圖的一部分。
在此先感謝。
請使用顯式連接語法重寫您的查詢。 –
我同意蒂姆加入語法會使這更容易排除故障,因爲你的關係不清楚。 http://www.w3schools.com/sql/sql_join_inner.asp是一個關於內連接的文章,以防這是一個新概念。我馬上看到的一個問題是,你沒有將table_s定義爲其他表的關係,這意味着這將創建一個交叉連接,並且可能會返回大量重複項,這可能也是爲什麼按性能劃分或分組很差的原因。 – Matt
嗨@ Matt/@ Tim,我同意使用顯式連接(Inner/left outer join)並重新編寫查詢的建議。另一點,我不認爲table_s可能是重複記錄的原因,因爲它與table_c有一個唯一的關係,而table_c是這個查詢中的一個引導表。 Thanks- – HelloFriends