0

当我做这个 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 条相同的记录。谁能帮助我?

4

3 回答 3

1

由于我们不知道您的表结构,可能有一些列与 1 到 n 项相关,而您尚未在WHERE查询部分处理它们。

作为一项额外措施,您可以专注于您的数据需求并GROUP BY在您的部分之前添加一个ORDER部分。

于 2013-09-13T07:14:07.260 回答
0

您正在使用 INNER JOIN,因此例如,表 cet 中有两个条目与用于组合表 ce 和 cet 的 where 子句匹配,从而为您提供表 ce 的 2 个条目/条目。

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

这使得表 ce 的每个条目总共有 6 个条目,即使您在表 ce 中只有 2 个条目,也总共给您 12 个条目。

因此,请再考虑一下什么 join 可能适合您所需的解决方案。

这里有更多解释的链接:连接的简短解释

于 2013-09-13T07:20:55.810 回答
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;
于 2013-09-13T07:50:39.200 回答