2014-09-19 28 views
0

所以我得到这个查询:SQL LEFT JOIN WHERE无法显示正确的结果

数据结构: 用户 ID --- inlog ---- ----名字更多的东西

llntoets ID ---代码---- ---- inlog更多的东西

oefeningen ID --- speler ---状态---- morestuff

(inlog和speler始终是一个相同的值用户)

SELECT 
// Some other stuff working 
SUM(o.status) AS oefn 
FROM users AS u 
LEFT JOIN  llntoets AS l 
ON (u.inlog = l.inlog) 
LEFT JOIN  oefeningen AS o 
ON (u.inlog = o.speler) AND o.status = 'afgewerkt' 
WHERE 
code = '$code' 
GROUP BY l.inlog 
ORDER BY klas ASC, klasnr ASC 

一切运行良好,除了1件事情的OEFN变量。它显示了一个数字,有时它显示了正确的值,有时它显示的值比应该高得多。有人告诉我可能是因为GROUP BY。有人可以帮我吗?

它应该统计来自表oefeningen的总记录,其中状态='afgewerkt',以及speler是来自用户的内部记录。谢谢,如果您有其他问题,请尝试解释更多。

+3

你可能有1:M的关系,你不期待。在你的选择中包含l.inlog,按顺序排序,然后按语句删除组。现在找到一个比您预期的SUM高得多的l.inlog值,并查看为什么您的选择中包含这些行。 – Carth 2014-09-19 12:57:00

回答

0

SUM(o.status)在您的查询中,它不应该计算表oefeningen的总记录。
该总和是满足您的条件的所有连接行的值的总和,可以是更高的数字。
还指出,即使您在写入LEFT JOIN时也应用了筛选器o.status = 'afgewerkt',但您正在执行JOIN查询。

+0

嘿,试图改变它,并将SUM编辑到COUNT,并加入它。但是现在我遇到了一个新问题,有时它只计算状态为'afgewerkt'的行,有时他会得到所有行。任何想法? – Thempower 2014-09-19 13:35:00