现在是周五下午*,我已经没法思考了。通常情况下我会回答一些愚蠢的 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
第三个工作没有出现是因为它不符合jobs.status
的条件。但是实际得到的结果是:
Job ID Complete Date
1 today
4 yesterday
Job 2 缺失,即 JOIN 像 INNER JOIN 一样运行。
我确定只是我恍惚了,但我看不出来为什么我的 LEFT (OUTER) JOIN 没有给我所有的工作,无论 note 的值如何。
具体来说,用户可以删除注释,因此可能一个完整/关闭的工作可能没有 type=complete 的注释(当状态改变时输入注释),我试图捕获当用户关闭一个工作、添加注释,然后删除注释的情况。
* 在东方的某个地方
WHERE
子句移动到JOIN
中解决了我在SQL Server中的问题。感谢@Taryn。 - user4089220