MySQL:LEFT JOIN选择

时间:2011-06-22 16:02:07

标签: mysql select join

如何连接两个表并使第二个表可选?

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中的数据?

3 个答案:

答案 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上的列是否为空。