mysql select语句。为什么它会返回相同记录中的6个

时间:2013-09-13 07:09:35

标签: mysql sql

当我创建这个sql语句时,我得到了6条返回的相同记录。因此,如果我希望返回2条记录,我会将每条记录中的6条记录回来,这样总共有12条记录。

SELECT 
ce2.* 
FROM customerentry ce, customerentrytrace cet, customerentry ce2 
WHERE ce.accountid = 1 
AND ce.companyid = 1 
AND ce.accountid=cet.accountid 
AND ce.accountid=ce2.accountid 
AND ce.companyid=cet.companyid 
AND ce.companyid=ce2.companyid 
AND cet.documentno = '2012Faktura1' 
AND cet.documenttype = 1 
AND ce2.documentno = cet.offsetdocumentno 
AND ce2.documenttype = cet.offsetdocumenttype 
ORDER BY created;

我知道我可以通过添加distinct来解决它,但我想知道为什么我会返回6条相同的记录。谁可以帮助我?

3 个答案:

答案 0 :(得分:1)

由于我们不了解您的表格结构,因此可能会有一些列与1个项目相关,而您尚未在查询的WHERE部分处理它们。

作为额外衡量标准,您可以专注于数据需求,并在GROUP BY部分之前添加ORDER部分。

答案 1 :(得分:0)

你正在使用INNER JOIN,所以例如表cet中有两个条目匹配你的where子句,用于组合表ce和cet,给你2个条目/表ce的条目。

进一步思考,你可以看到,如果表ce2中有3个条目与where子句相匹配,用于组合表cet和ce2,你得到3个条目/表cet的条目。

对于表格ce的每个条目共有6个条目,即使您在表格ce中只有2个条目,总共会有12个条目。

请再次考虑哪种联接可能是您所需解决方案的正确选择。

这里有一个更多解释的链接:Short explanation of joins

答案 2 :(得分:0)

问题可能是因为您没有正确连接表格。请阅读JOIN

SELECT ce2.* 
FROM customerentry ce INNER JOIN customerentrytrace cet ON ce.accountid=cet.accountid AND ce.companyid=cet.companyid, 

INNER JOIN customerentry ce2 ON ce.accountid=ce2.accountid AND ce.companyid=ce2.companyid AND ce2.documentno = cet.offsetdocumentno AND ce2.documenttype = cet.offsetdocumenttype 

WHERE ce.accountid = 1 
    AND ce.companyid = 1 
    AND cet.documentno = '2012Faktura1' 
    AND cet.documenttype = 1 

ORDER BY created;