在mysql查询中删除结果集中的记录的DISTINCT

时间:2014-08-29 14:08:38

标签: mysql

mysql查询中的

DISTINCT 从结果集中删除记录

我有三张桌子

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 个答案:

答案 0 :(得分:1)

您在tbl1或tbl2中有多个映射到同一tbl3的记录,并且由于您只在输出中选择了tbl3。*,因此DISTINCT会删除重复项。要找到重复项,请删除DISTINCT,向SELECT子句添加COUNT(*),最后添加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;