2017-10-13 4 views
-1

funktioniert Ich habe dieses Beispiel für mein Problem: http://sqlfiddle.com/#!9/0cc41/1/0MYSQL LEFT JOIN Bedingung nicht

Beschreibung: Es gibt drei Tabellen (Ereignisse, Personen und Benutzer). Die Tabelle Personen verbindet Ereignisse und Benutzer. personals.type_id ist die events.id und persons.user_id ist user.id. Ich habe zwei Ereignisse (ID 1 und 2) erstellt. Für jede Veranstaltung gibt es einen Eintrag persönlich.

My 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 

Meine Erwartung war:

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

Wie Sie sehen können, ist das Ergebnis:

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

Es scheint, dass er das ignoriert ON- Zustand des linken Joins.

Aber wo ist mein Fehler?

Antwort

1

GROUP_CONCAT sollte (fast) immer eine Gruppe haben durch und Gruppe ohne Aggregation nicht sinnvoll ist Vielleicht ist das, was Sie brauchen

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