1

我有两个表:一个包含清单上的项目(checklist_id,内容),另一个包含用户和清单项目编号之间的关系(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;

但是,如果任何用户已完成给定的清单项,则已完成返回 true。我需要在加入之前过滤第二个表 WHERE user_fk = XX ,但是我该怎么做呢?我相信您应该使用 HAVING user_fk = XX 但这会引发语法错误。

4

1 回答 1

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代码中的条件。

于 2012-08-27T02:32:24.240 回答