programing

MySQL - 각 행의 연결된 테이블에서 COUNT()가 표시된 열을 가져옵니다.

elecom 2023. 7. 27. 21:36
반응형

MySQL - 각 행의 연결된 테이블에서 COUNT()가 표시된 열을 가져옵니다.

MySQL(5.5.60-MariaDB)에 데이터베이스가 있습니다.

나는 하고 있습니다.SELECT테이블에서 행을 가져오기 위한 쿼리revision_filters그 다음에 다양한INNER JOIN연결된 데이터를 가져옵니다.쿼리는 다음과 같이 표시되며 올바르게 실행됩니다.

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반환된 각 행에서 다음을 얻을 수 있도록 쿼리합니다.COUNT의 행 수 중에서revision_filters_substances의 행에 해당하는.SELECT을 묻다.revision_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을 지정하는 방법도 보이지 않으므로, 이를 달성하는 방법에 대한 조언도 필요합니다.

별칭을 지정했습니다.revision_filters의 식탁.RevisionFilters.사용하다RevisionFilters.id대신에where상관 하위 쿼리의 절입니다.

또한 "행 없음"을 처리하기 위해 현재 하위 쿼리가 반환됩니다.NULL0을 반환하려면 주변을 사용해야 합니다.

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) */

언급URL : https://stackoverflow.com/questions/57801999/mysql-get-a-column-showing-count-from-an-associated-table-on-each-row

반응형