2014-08-29 267 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