[MySQL] JOIN von 3 Tabellen -> NULL als Lückfüller

Benzbob

Mitglied
Guten Abend zusammen,

da ich nur Grundkenntnisse von SQL habe komme ich gerade leider nicht weiter. Ich bin mir sicher die Abfrage ist nicht alzu schwierig, dennoch schaffe ich es gerade nicht.

Ich habe 3 Tabellen:

Bands:
id, name

Tags:
band_id, tag

Genre:
band_id, genre

Beispieldaten:
Bands:
1, band1

Tags:
1, tag1
1, tag2
1, tag3

Genre:
1, genre1
1, genre2
1, genre3


Jetzt möchte ich alle Tabellen miteinander verbinden und zwar das folgende Ausgabe erzeugt wird:

idnametaggenre
1band1tag1null
1band1tag2null
1band1tag3null
1band1nullgenre1
1band1nullgenre2
1band1nullgenre3


Bisher habe ich es nur geschafft dass alle "null"-Felder auch mit genres/tags gefüllt werden, aber nicht mit "null".
SQL:
SELECT *
FROM `bands` as b
LEFT JOIN `genres` as g on b.id = g.band_id
LEFT JOIN `tags` as t on b.id = t.band_id

Viele Dank schonmal
 
Zuletzt bearbeitet von einem Moderator:
SQL:
select 
b.id,
b.name,
t.tag,
null as genre
from
bands b
inner join
tags t
on t.band_id = b.id

union all

select
b.id, 
b.name,
null as tag,
g.genre
from
bands b
inner join
genres g
on g.band_id = b.id
 
Zuletzt bearbeitet von einem Moderator:
Hi,
danke schonmal für die Antwort, ich wollte das aber eigentlich ohne "Union" lösen weil ich evtl, später noch ein "Group by" machen wollte.

Oder ist das auch möglich?
 
Ohne UNION kriegst das nicht hin. ABer das hindert dich am GROUP BY ja nicht. Du kannst dieses UNION als Subquery verwenden
 
Hi,

hm also ich schaff das gerade nicht.
Also ich würde gerne das Group by in Verbindung mit einem Count auf die Tabelle anwenden, damit der mir in dem oben genannten Beispiel folgendes ausgibt:

Bandanzahl
band16
 
SQL:
SELECT
  mydata.id,
  count(*) AS anzahl
FROM
  (
    SELECT 
      b.id,
      b.name,
      t.tag,
      NULL AS genre
    FROM
      bands b
      INNER JOIN tags t
        ON t.band_id = b.id
    UNION ALL SELECT
      b.id, 
      b.name,
      NULL AS tag,
      g.genre
    FROM
      bands b
      INNER JOIN genres g
        ON g.band_id = b.id
  ) AS mydata
GROUP BY
  mydata.id
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück