1

我在 MySQL (5.5.60-MariaDB) 中有一个数据库。

我正在做一个SELECT查询以从一个名为的表中获取行,revision_filters然后是各种INNER JOIN's 以获取相关数据。查询如下所示并正确执行:

SELECT RevisionFilters.id      AS `RevisionFilters__id`,
       RevisionFilters.date    AS `RevisionFilters__date`,
       RevisionFilters.comment AS `RevisionFilters__comment`,
       filters.label           AS `Filters__label`,
       filters.anchor          AS `Filters__anchor`,
       groups.label            AS `Groups__label`
FROM   revision_filters RevisionFilters
       INNER JOIN dev_hub_subdb.filters Filters
               ON filters.id = ( RevisionFilters.filter_id )
       INNER JOIN dev_hub_subdb.groups Groups
               ON groups.id = ( filters.group_id )
       INNER JOIN dev_hub_subdb.regulations Regulations
               ON regulations.id = ( groups.regulation_id ) 

有一个表叫revision_filters_substances. 表的结构如下。在这种情况下revision_filter_id,是一个与 相关的外键revision_filters.id

mysql> describe revision_filters_substances;
+--------------------+-----------------------+------+-----+---------+----------------+
| Field              | Type                  | Null | Key | Default | Extra          |
+--------------------+-----------------------+------+-----+---------+----------------+
| id                 | mediumint(8) unsigned | NO   | PRI | NULL    | auto_increment |
| revision_filter_id | mediumint(8) unsigned | NO   | MUL | NULL    |                |
| substance_id       | mediumint(8) unsigned | NO   | MUL | NULL    |                |
+--------------------+-----------------------+------+-----+---------+----------------+

我想要做的是调整我的SELECT查询,以便在返回的每一行上,我可以获得与查询中的COUNTrevision_filters_substances相对应的行数。SELECTrevision_filters

在某些情况下,可能没有revision_filters_substances对应于特定的行revision_filters.id,在这种情况下,我需要计数返回 0。

我已阅读https://dba.stackexchange.com/questions/133384/counting-rows-from-a-subquery

但我看不出如何使它适应我的查询。

它在链接的文章上说

子查询应紧跟 FROM 关键字。

FROM revision_filters RevisionFilters所以我已经尝试在我已经完成的查询之后立即执行此操作:

, (SELECT COUNT(id) FROM revision_filters_substances WHERE id = revision_filters.id) AS count_substances 

但是这个错误:

“where 子句”中的未知列“revision_filters.id”

请有人建议这是否可能?如果也没有相应的行,我也看不到如何指定 0,因此还需要有关如何实现这一点的建议。

4

1 回答 1

1

revision_filters您已将表别名为RevisionFilters在Correlated SubqueryRevisionFilters.idwhere子句中使用。

此外,为了处理“无行”,当前子查询将返回NULL;你必须使用Coalesce(..)它来返回 0。

SELECT .... , 
       COALESCE(SELECT COUNT(id) 
                FROM revision_filters_substances 
                WHERE id = RevisionFilters.id, 0) AS count_substances 
.... /* your rest of the query here (FROM, WHERE clauses etc) */
于 2019-09-05T09:08:37.930 回答