【发布时间】:2014-04-22 16:17:34
【问题描述】:
这是我的查询:
SELECT count(*) AS COUNT
FROM `psttodo-in` p
INNER JOIN `deelgebied` d
ON d.`Segmentcode` = p.`Segment No_ PST`
AND d.`Deelgebied` = p.`Deelgebied`
INNER JOIN m2m
ON m2m.`deelgebied` = d.`deelgebiedID`
WHERE
p.`Segment No_ PST` = 'PSS1400146'
AND p.`Deelgebied` = 2
ORDER BY `afgewerkt tablet datum`
现在,当我在 Sequal Pro 中检查我的表 psttodo-in 时,我选择了 Segment No_ PST = PSS1400146 和 Deelgebied = 2 计数 84 的行。但是当我运行查询时,我得到了252 的结果。我做错了什么?
更新:
我的表结构:
table psttodo-in:
PK No_
Hostess Code
Segment No_
FK Deelgebied
....
table deelgebied
Segmentcode
Deelgebied
map
DeelgebiedID
pst-active
table m2m
PK m2mID
FK deelgebied
FK psthostess
【问题讨论】:
-
其他表中的多条记录与您的
ON-clauses 匹配。 -
我不明白...我该如何解决这个问题?
-
这取决于您的表结构,请分享它们以便提供足够的信息以便我们分析问题。
-
找到一种更好的方法来过滤连接表中的行,添加额外的子句来识别唯一记录。
-
您的联接将返回两个表中的所有匹配记录。您在 psttodo-in 中可能只有 84 条记录,但显然 OTHER 表中有多个匹配记录。例如如果 pstoddo-in 有记录
(a,b),并且连接带回(a,b,1)和(a,b,2),则您的 pstoddo-in 计数为 1,但您仍有两条记录。
标签: php mysql sql inner-join semi-join