【问题标题】:SQL LEFT JOIN WHERE not displaying right resultSQL LEFT JOIN WHERE 不显示正确的结果
【发布时间】:2014-09-19 12:52:56
【问题描述】:

所以我得到了这个查询:

数据结构: 用户 id---inlog----name----更多的东西

llntoets id---code----inlog----更多的东西

欧芬根 id---speler---status----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

除了 oefn 变量中的 1 件事之外,一切都运行良好。它显示一个数字,有时它显示正确的值,有时它显示的值远高于应有的值。有人告诉我这可能是因为 GROUP BY。有人可以帮我吗?

它应该计算来自表 oefeningen 的总记录,其中 status = 'afgewerkt' 并且 speler 是来自用户的 inlog。谢谢,如果您有其他问题,请尝试解释更多。

【问题讨论】:

  • 您可能有一个出乎意料的 1:M 关系。在您的选择中包含 l.inlog,按它排序,然后删除 group by 语句。现在找到一个 SUM 比您预期高得多的 l.inlog 值,看看为什么您的选择中包含这些行。

标签: sql join group-by where


【解决方案1】:

查询中的SUM(o.status) 不应该计算表oefeningen 的总记录。
该总和是满足您的条件的所有连接行的值的总和,可以是更高的数字。
另请注意,应用过滤器o.status = 'afgewerkt',即使您在查询中写了LEFT JOIN,您也会执行JOIN

【讨论】:

  • 嘿,尝试更改它并将 SUM 编辑为 COUNT,并对其进行 JOIN。但现在我有一个新问题,有时它只计算状态为'afgewerkt'的行,有时他得到所有行。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
相关资源
最近更新 更多