2016-03-29 1 views
0

Ich versuche, einen LINKEN JOIN in Verbindung mit einem GROUP_CONCAT zu verwenden, aber nicht die erwarteten Ergebnisse zu erhalten.GROUP_CONCAT auf LEFT JOIN erzeugt Gruppen gegen NULL

Zwei einfache Tabellen:

weather_alerts:

id | user_id | resort_id 
1 | 1  | 1 
2 | 1  | 2 
3 | 1  | 3 
4 | 1  | 5 

weather_users

id | email 
1 | [email protected] 

Die Abfrage:

SELECT GROUP_CONCAT(wa.resort_id) AS resort_ids, wu.email FROM weather_alerts wa LEFT JOIN weather_users wu ON wa.id = wu.user_id GROUP BY wu.email

Statt Erzeugungs:

email   resort_ids 
[email protected]  1,2,3,5 

ich:

email   resort_ids 
NULL    2,3,5 
[email protected]  1 

Ich vermute, dies ist ein Problem mit dem JOIN statt der CONCAT.

+0

Zu meiner Denkweise sein beizutreten, gibt es kein Problem in MySQL für die GROUP_CONCAT (oder auch CONCAT) einen Teil der Lösung ist. Erwägen Sie, Probleme bei der Anzeige von Daten in der Präsentationsebene zu behandeln, falls diese verfügbar ist. – Strawberry

+1

Ich bekomme die richtigen Ergebnisse mit ähnlichen Abfrage - siehe http://sqlfiddle.com/#!9/c1c6c1/4 – zedfoxus

Antwort

2

Es scheint, dass Ihr LINKER JOIN verbesserungsbedürftig ist.

create table weather_alerts (id int, user_id int, resort_id int); 
insert into weather_alerts values (1, 1, 1), (2, 1, 2), (3, 1, 3), (4, 1, 5); 

create table weather_users (id int, email varchar(100)); 
insert into weather_users values (1, '[email protected]'); 

Abfrage

SELECT GROUP_CONCAT(wa.resort_id ORDER BY wa.resort_id) AS resort_ids, wu.email 
FROM weather_alerts wa 
LEFT JOIN weather_users wu ON wa.user_id = wu.id 
GROUP BY wu.email 

Beachten Sie, dass Sie auf wa.id = wu.user_id beitreten. Das sollte auf wa.user_id = wu.id

Ergebnis

| resort_ids |  email | 
|------------|-----------| 
| 1,2,3,5 | [email protected] | 
+0

Es war die falsche Spalten, denen ich beitrat! Vielen Dank! – Dan