2014-08-29 101 views
0

DISTINCT記錄在MySQL查詢從結果集DISTINCT在MySQL查詢去除結果集

刪除記錄我有三個表

TBL1  TBL2   TBL3 
----  ------  --------  
tbl1_id tbl2_id  tbl3_id      
cid  fkcid  fkcid 
      fktbl1_id fktbl2_id 

我有查詢來獲取TBL3

select distinct tbl3.* from TBL3 tbl3 
inner join TBL2 tbl2 on tbl2.tbl2_id = tbl3.fktbl2_id and tbl2.fkcid = tbl3.fkcid 
inner join TBL1 tbl1 on tbl1.tbl1_id = tbl2.fktbl1_id and tbl2.fkcid = tbl1.cid; 
記錄

此查詢爲我提供了大約1000條記錄。

但是當我刪除不同於查詢它給了我大約1100條記錄。 表中沒有重複的記錄。我也確認這些額外的100不是重複的。請注意,在具有不同關鍵字的查詢中找不到這些額外的100條記錄。

爲什麼這個查詢的行爲意外。請幫助我更清楚地理解並糾正我,如果我犯了錯誤。 謝謝

+1

你可能有一到當你加入其他表時發生的多種關係。這意味着您的'Tbl3'鍵在'Tbl1'或'Tbl2'中出現多次。 DISTINCT刪除這些_duplicates_,但它們實際上並不重複。如果您包含所有表中的所有數據,則可以看到數據。 – Taryn 2014-08-29 14:13:05

回答

1

您在tbl1或tbl2中有多條映射到相同tbl3的記錄,並且由於您只在輸出中選擇了tbl3。*,因此DISTINCT將刪除重複項。若要改爲查找重複項,刪除DISTINCT,一個COUNT(*)添加到SELECT子句,並在最後一個GROUP BY添加和HAVING,如:

select tbl3.*, count(*) 
from TBL3 tbl3 
inner join TBL2 tbl2 on tbl2.tbl2_id = tbl3.fktbl2_id and tbl2.fkcid = tbl3.fkcid 
inner join TBL1 tbl1 on tbl1.tbl1_id = tbl2.fktbl1_id and tbl2.fkcid = tbl1.cid 
group by tbl3.tbl3_id, tbl3.fkcid, tbl3.fktbl2_id having count(*) > 1; 
+0

它給零記錄。這意味着沒有重複。 – 2014-08-30 05:48:39