MYSQL Join Abfrage soll auch alle Felder zurückgeben

hehe_me

Mitglied
Hallo,

ich frag mich gerade wie ich es schaffe das alle Gruppen zurückgegeben werden.

es gibt 3 Tabellen:

Tabelle "buch_groups_def"
| id | name |

Tabelle "buch_groups"
| buch_group_id | buch_id |

Tabelle "buecher"
| id | owner |

Also die 'buch_groups'-Tabelle ist quasi die mxn-Tabelle


Diese 3 Tabellen wollte ich mit einer SQL abfrage verknüpfend ausgeben lassen, scheitere jedoch daran, dass die Gruppen in denen keine 'buch_ids' sind bzw. keine 'owner' nicht ausgegeben werden...

So sieht meine SQL-Abfrage aus:

Code:
SELECT buch_groups_def.id AS groupid, buch_groups_def.name AS groupname, group_concat( DISTINCT ( CAST( buch_groups.buch_id AS CHAR ) )) AS buch_ids, group_concat( DISTINCT ( buecher.owner) ) AS owners 

FROM buch_groups 

LEFT JOIN buch_groups_def ON buch_groups.buch_group_id = buch_groups_def.id 

RIGHT JOIN buecher ON buch_groups.buch_id = buecher.id 

GROUP BY buch_group_id 
ORDER BY groupid DESC

Und das Resultat:


Code:
groupid 	groupname 	              buch_ids 	                owners
14 	 	     action               4082,4085                  peter,stefan
13 	        liebe                 4085,4122	                test,lalala
12 	        test	                 4091,4092,4093       oli,Bill,hans
7 	        technik 	                4085 	                harry


Gewünscht:

Code:
groupid 	groupname 	              buch_ids 	                owners
14 	 	      action               4082,4085                  peter,stefan
34            kunfu                NULL                          NULL
13 	        liebe                 4085,4122	                test,lalala
12 	        test	               4091,4092,4093          oli,Bill,hans
45            xxx                    NULL                         NULL
7 	        technik 	                4085 	                 harry

Für Hilfe wäre ich sehr erfreut und ich hoffe ich konnte mich präzise genug ausdrücken

im voraus
Besten Dank
 
Zuletzt bearbeitet:
Hallo und danke für die Antwort.
Die Änderung klappt nicht.
Es werden leider immernoch nicht alle Gruppen zurückgegeben..
Evtl. eine andere Möglichkeit?
 
Ich habe noch direkt nach dem SELECT "buch_groups_def.id AS groupid" in "device_groups_def.name as groupid" geändert.

Nochmal: Es lag am Group By welches ich in 'groupname' änderte. Jetzt klappt es auch.

Besten Dank für die bisherige Hilfe..
 
Zuletzt bearbeitet:
Hallo nochmals eine Frage?

Code:
LEFT JOIN buch_groups ON buch_groups.buch_group_id = buch_groups_def.id
AND buch_groups_def.name = 'TELLA.technik'


Mir gibt diese Abfrage zwar ein Resultat zurück. aber wie schaffe ich es, dass hier z.b.
alle Gruppen TELLA.* zurückgegeben werden?

Mit:

Code:
LEFT JOIN buch_groups ON buch_groups.buch_group_id = buch_groups_def.id
AND buch_groups_def.name = 'TELLA.%'

bin ich leider nicht erfolgreich.

Besten Dank im voraus
 
Hallo und guten Morgen chibisuke,

LIKE "TELLAS.%" liefert mir dies aber das Problem ist das auch Einträge zurückgegeben werden die nicht auf das Suchmuster "TELLAS.%" zutreffen.

...
 
Zuletzt bearbeitet:
weil du deinen LEFT JOIN machst und deinen check in der ON clause ausführt.

warscheinlich ist das was du willst ein INNER JOIN.
 
Zurück