2017-03-08 2 views
1

Ich versuche, meinen Kopf um JOINS eingehüllt zu bekommen. Ich habe eine Vielzahl von Joins ohne Erfolg versucht.Abfrage 2 Tabellen basierend auf der dritten Haupttabelle

Betrachten Sie die folgenden Tabellen:

Allsongs

+--------+--------------+------+-----+---------+-------+ 
| Field | Type   | Null | Key | Default | Extra | 
+--------+--------------+------+-----+---------+-------+ 
| ID  | int(11)  | NO | PRI | NULL |  | 
| Artist | varchar(100) | YES |  | NULL |  | 
| Title | varchar(100) | YES |  | NULL |  | 
+--------+--------------+------+-----+---------+-------+ 

verschiedene Künstler Tabellen: zB Elvis, Beatles usw.

+--------+---------+------+-----+---------+-------+ 
| Field | Type | Null | Key | Default | Extra | 
+--------+---------+------+-----+---------+-------+ 
| ID  | int(11) | NO | PRI | NULL |  | 
| Songid | int(11) | YES |  | NULL |  | 
+--------+---------+------+-----+---------+-------+ 

Das songID Feld in den Künstler Tabellen ist identisch mit den allsongs .id Feld

Ich versuche eine Abfrage th zu erstellen die folgenden Abfragen in eine Abfrage bei beitreten

select s.title from allsongs s 
join beatles b ON s.id = b.songid; 

select s.title from allsongs s 
join elvis e ON s.id = e.songid; 

Ich dachte, das könnte funktionieren:

select s.title from allsongs s 
join beatles b ON s.id = b.songid 
join elvis e ON s.id = e.songid; 

aber es gibt: Leeren Satz.

Wenn ich LEFT OUTER JOIN es tut, was ich will, solange ich die die Anzahl der Zeilen manuell

Ich hoffe, beschränke ich klar genug bin zu sein. Jede Hilfe wäre willkommen.

Dank

Antwort

0

Sie können dies mit einer Union tun. Beide Abfragen müssen die gleiche Anzahl von Spalten mit derselben Datentypenreihenfolge zurückgeben. Die Spaltennamen stammen aus der ersten SELECT-Anweisung, falls Sie danach eine Bestellung oder ähnliches durchführen möchten.

(select s.title from allsongs s 
join beatles a ON s.id = a.songid) 
union all 
(select s.title from allsongs s 
join elvis a ON s.id = a.songid); 
+0

Ausgezeichnet. Dies funktioniert bis auf ein Problem. Es stellt sich heraus, dass einer der Titel bei beiden Künstlern war, folglich gab es nur einen von ihnen zurück. Würde es da einen Weg geben oder ist das einfach aufgrund der Tischstrukturen? – Pete

+0

Ändern Sie es in "UNION ALL" anstelle von Union. Das wird doppelte Zeilen anzeigen. – Ilion

Verwandte Themen