2017-10-13 5 views
-1

작동하지 않습니다 가입 : http://sqlfiddle.com/#!9/0cc41/1/0MYSQL은 왼쪽 조건 나는 내 문제의 예를

설명 : 세 개의 테이블 (이벤트, 사람 및 사용자)이 있습니다. 테이블 사람은 이벤트와 사용자를 연결합니다. persons.type_id는 events.id이고 persons.user_id는 user.id입니다. 두 사건 (id 1과 2)을 만들었습니다. 각 이벤트마다 직접 한 항목이 있습니다.

내는 SQL :

SELECT events.*, 
coalesce(part_person.Accept_Participants_LJ, 0) AS Accept_Participants 
FROM events 
LEFT JOIN (
    SELECT GROUP_CONCAT(CONCAT(part_user.forname, ' ', part_user.surname) SEPARATOR ', ') AS Accept_Participants_LJ, 
    part_person.type_id 
    FROM persons AS part_person 
    LEFT JOIN user AS part_user ON part_user.id = part_person.user_id 
    WHERE part_person.type = 'event_participant' 
) part_person ON events.id = part_person.type_id 
GROUP BY events.id 

내 기대했다 : 당신이 볼 수 있듯이

------------------------ 
|id|Accept_Participants| 
------------------------ 
|1 | Carl Habicht  | 
------------------------ 
|2 | Peter Zwegert  | 
------------------------ 

, 결과는 다음과 같습니다

---------------------------------- 
|id| Accept_Participants   | 
---------------------------------- 
|1 | Carl Habicht, Peter Zwegert| 
---------------------------------- 
|2 | 0       | 
---------------------------------- 

그가를 무시 보인다 ON- 왼쪽 결합의 조건입니다.

하지만 내 실수는 어디에 있습니까?

답변

1

GROUP_CONCAT이 (거의) 항상 집계가 유용하지 않고하여 그룹화 및 그룹을 가져야한다 어쩌면 이것은 당신이 필요로하는 것입니다

SELECT events.*, 
coalesce(part_person.Accept_Participants_LJ, 0) AS Accept_Participants 
FROM events 
LEFT JOIN (
    SELECT GROUP_CONCAT(CONCAT(part_user.forname, ' ', part_user.surname) SEPARATOR ', ') AS Accept_Participants_LJ, 
    part_person.type_id 
    FROM persons AS part_person 
    LEFT JOIN user AS part_user ON part_user.id = part_person.user_id 
    WHERE part_person.type = 'event_participant' 
    group by part_person.type_id 
) part_person ON events.id = part_person.type_id 
order BY events.id