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