如何连接两个表并使第二个表可选?
SELECT t1.title,SUM(t2.seconds) AS seconds
FROM operation t1
LEFT JOIN workhours t2 ON t1.id = t2.pid AND t1.status='0'
ORDER BY t1.tstamp DESC
此查询仅显示一个结果,但第二个结果中包含任何工作时间。即使t2中没有任何内容,如何确保始终显示t1中的数据?
答案 0 :(得分:4)
您需要添加GROUP BY t1.title
:
SELECT t1.title,SUM(t2.seconds) AS seconds
FROM operation t1 LEFT JOIN workhours t2 ON t1.id = t2.pid AND t1.status='0'
GROUP BY t1.title
ORDER BY t1.tstamp DESC
通常,如果title不是唯一的,则应按唯一键分组。
答案 1 :(得分:0)
如果你需要总是得到第一个与第二个结果不匹配的结果,那么你必须使用左外连接如果另一个表没有任何匹配的结果第二个,如果第二个与连接匹配,它将始终独立显示第一个的结果。
答案 2 :(得分:0)
似乎问题可能出在您选择的“SUM(t2.seconds)”参数中。
尝试添加ISNULL(SUM(t2.seconds),0)。
如果这不起作用,您可以尝试SQL IF语句或CASE并检查t2上的列是否为空。