【问题标题】:MySQL joining two tables but filtering firstMySQL加入两个表但首先过滤
【发布时间】:2012-08-21 13:27:32
【问题描述】:

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

【问题讨论】:

    标签: mysql left-join filtering


    【解决方案1】:

    如果您针对特定用户,则必须在 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 条件。

    【讨论】:

    • 非常感谢!像魅力一样工作。
    猜你喜欢
    • 2015-02-05
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多