MySQL에서 GROUP_CONCAT 및 LEFT JOIN을 사용하여 관련 솔루션이 있는 각 티켓에 대해 별도의 행을 검색하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-10-26 10:05:29
원래의
928명이 탐색했습니다.

How to Retrieve Separate Rows for Each Ticket with Associated Solutions Using GROUP_CONCAT and LEFT JOIN in MySQL?

MySQL: LEFT JOIN을 사용하여 GROUP_CONCAT JOIN

MySQL에서는 GROUP_CONCAT 함수를 LEFT JOIN과 함께 사용하여 여러 테이블에서 데이터를 검색할 수 있습니다. 그러나 올바르게 사용하지 않으면 사용자에게 성능 문제가 발생할 수 있습니다.

문제 설명

티켓(Tickets) 및 솔루션(Solutions)에 대한 테이블이 있는 헬프 데스크 데이터베이스를 고려해보세요. 다음 문을 사용하여 해당 솔루션 항목이 포함된 모든 티켓을 검색하는 쿼리가 작성되었습니다.

<code class="sql">SELECT Tickets.*, GROUP_CONCAT(Solutions.solution) AS CombinedSolutions
FROM Tickets
LEFT JOIN Solutions ON Tickets.id = Solutions.ticket_id
ORDER BY Tickets.id;</code>
로그인 후 복사

이 쿼리는 첫 번째 티켓의 정보와 두 티켓의 모든 솔루션이 포함된 단일 행을 반환합니다. 각 티켓에 관련 솔루션이 포함된 별도의 행이 있을 것으로 예상하므로 이는 의도한 것이 아닙니다.

솔루션

이 문제를 해결하려면 쿼리를 다음과 같이 수정할 수 있습니다.

<code class="sql">SELECT t.*, x.combinedsolutions
FROM TICKETS t
LEFT JOIN (
    SELECT s.ticket_id, GROUP_CONCAT(s.solution) AS combinedsolutions
    FROM SOLUTIONS s
    GROUP BY s.ticket_id
) x ON x.ticket_id = t.ticket_id</code>
로그인 후 복사

이 수정된 쿼리에서 LEFT JOIN 절의 하위 쿼리는 적절한 그룹 내에서 GROUP_CONCAT을 사용하여 각 티켓에 대해 결합된 솔루션을 검색합니다. 그런 다음 외부 쿼리는 ticket_id 필드를 사용하여 이 결과를 기본 Tickets 테이블과 조인합니다.

대체 솔루션

대체 접근 방식은 중첩 쿼리 innerhalb der Haupt-SELECT-Anweisung:

<code class="sql">SELECT t.*,
       (SELECT GROUP_CONCAT(s.soution)
        FROM SOLUTIONS s
        WHERE s.ticket_id = t.ticket_id) AS combinedsolutions
FROM TICKETS t</code>
로그인 후 복사
이 접근 방식은 외부 SELECT 문 내에 GROUP_CONCAT 쿼리를 삽입하여 동일한 작업을 수행합니다.

이러한 수정 사항 중 하나를 활용하면 쿼리는 이제 각 티켓에 대해 별도의 행을 올바르게 검색해야 합니다. 티켓 정보와 해당 티켓에 대한 솔루션이 포함된 행입니다.

위 내용은 MySQL에서 GROUP_CONCAT 및 LEFT JOIN을 사용하여 관련 솔루션이 있는 각 티켓에 대해 별도의 행을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿