我有两个表:一个包含清单上的项目(checklist_id,content),另一个包含用户和清单项目编号之间的关系(checklist_fk,user_fk)。每次用户检查项目时,都会插入一行,表示用户15已完成项目3。
当我查询时,我正在使用
SELECT content, user_fk, checklist_id, checklist_fk
if (checklist_fk is null, false, true) completed
FROM checklist
LEFT JOIN checklist_completion ON checklist_id = checklist_fk;
但是,如果任何用户已完成给定的核对表项,则completed返回true。我需要在连接之前过滤第二个表WHERE user_fk = XX,但是我该怎么做?我相信你应该使用HAVING user_fk = XX,但会引发语法错误。
答案 0 :(得分:2)
如果您定位到特定用户,则必须在LEFT JOIN
内添加该条件,如下所示:
SELECT content, checklist_id, checklist_fk AS completed
FROM checklist
LEFT JOIN checklist_completion ON checklist_id = checklist_fk AND user_fk = 123
顺便说一句,正如您可能已经注意到的那样,我已经取出IF
语句,因为您可以轻松检查代码中的NULL
条件。