【发布时间】:2013-08-08 23:16:11
【问题描述】:
现在是星期五下午*,我的大脑已经停止工作。通常是我在回答这种愚蠢的 SQL 问题,对不起!
我正在尝试通过将后者与前者 LEFT JOIN 来获取一个表以及另一个表的列的最高值。
SELECT
jobs.*,
MAX(notes.`timestamp`) AS complete_date
FROM jobs
LEFT JOIN notes ON (jobs.id=notes.job_id)
WHERE (jobs.status="complete" OR jobs.status="closed")
AND (notes.type="complete" OR notes.type IS NULL)
GROUP BY jobs.id
ORDER BY complete_date ASC
我正在尝试获得所有个符合WHERE jobs.... 标准的工作,如果有的话,与该工作相关的最新type=complete 注释的时间戳:
Job ID Complete Date
1 today
2 NULL
4 yesterday
作业 3 不显示,因为它不符合 jobs.status 标准。但我实际得到的是:
Job ID Complete Date
1 today
4 yesterday
缺少作业 2,即 JOIN 的行为类似于 INNER JOIN。
我确定这只是我脑死亡的时刻,但我不明白为什么我的 LEFT(OUTER)JOIN 并没有给我所有的工作,无论票据的价值如何。
具体来说,用户可以删除注释,因此可能一个完整/已关闭的作业上可能没有 type=complete 注释(状态更改时输入注释),我试图在用户关闭时捕捉到这种情况作业,添加注释,然后删除注释。
*东方某处
【问题讨论】:
标签: mysql left-join aggregate-functions