金曜日の午後*で、私の脳は機能を停止しています。通常、このような愚かな SQL の質問に答えるのは私です。
後者を前者にLEFT JOINすることにより、別のテーブルの列の最大値とともに、1つのテーブルを取得しようとしています。
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
(ステータスが変更されたときにメモが入力されます)。ユーザーがジョブを閉じてメモを追加するケースをキャッチしようとしています。 、次にメモを削除します。
*東のどこか