MySQL连接两个表但先过滤

时间:2012-08-27 02:14:57

标签: mysql left-join filtering

我有两个表:一个包含清单上的项目(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,但会引发语法错误。

1 个答案:

答案 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条件。