我怎样才能加入两个表并使第二个可选?
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 的数据?
您需要添加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
一般来说,如果标题不是唯一的,您应该按唯一键分组。
如果您需要始终获得第一个结果与第二个不匹配的结果,因此如果另一个表与第二个表没有任何匹配结果,则必须使用左外连接,它将始终显示结果如果第二个与联接匹配,则第一个独立。
看来问题可能出在您选择的“SUM(t2.seconds)”参数中。
尝试添加 ISNULL(SUM(t2.seconds), 0)。
如果这不起作用,您可以尝试使用 SQL IF 语句或 CASE 并检查 t2 上的列是否存在空值。