首页 > 解决方案 > MySQL:如果 GROUPS 中的所有项目都不匹配,则 LEFT JOIN 的 WHERE 条件

问题描述

我有两个表,出版物和问题。我想显示出版物列表和每个出版物的问题数。这很简单:

SELECT p.id
     , p.title
     , COUNT(i.id) AS countOfIssues 
  FROM publications p 
  LEFT 
  JOIN issues i 
    ON p.id = i.publicationId 
 GROUP 
    BY p.id;

但是,问题可以将“已删除”列设置为 1,我只想计算未删除的问题。另外,如果没有问题,我想显示发布行,所以:

SELECT p.id
     , p.title
     , COUNT(i.id) AS countOfIssues 
  FROM publications p 
  LEFT 
  JOIN issues i 
    ON p.id = i.publicationId 
 WHERE i.deleted = 0 
    OR i.deleted IS NULL 
 GROUP 
    BY p.id;

但是,当出版物中的所有问题都已删除 = 1 时,这种情况会失败。在这种情况下,缺少此发布行。

如何改善 WHERE 条件?

标签: mysql

解决方案


哦,很简单,条件必须在JOIN里面:

SELECT p.id, p.title, COUNT(i.id) AS countOfIssues FROM publications p LEFT JOIN issues i ON p.id=i.publicationId AND i.deleted=0 GROUP BY p.id;


推荐阅读