Der Titel ist wahrscheinlich ein schlechter Titel, aber ich kann nicht glauben, einen besseren ...SQL-Tabellen Join, die sowohl eine 0.59 und eine zu viele Beziehung
Ich habe eine Art von einzigartigen Schema haben, wo das Ich habe 5 Tabellen mit Beziehungen, aber eine der Tabellen hat eine Beziehung mit zwei Tabellen. Um es weniger verwirrend, lassen Sie mich Ihnen das Schema zeigen:
Tabelle A:
AID BID Name
1 1 101
2 1 102
3 1 103
4 2 104
5 3 105
6 4 106
Wo AID ist die primäre ID Tabelle A und BID ist eine primäre ID Tabelle B
Tabelle B:
BID CID DID Name
1 null 3 101
2 null 4 102
3 1 null 103
4 2 null 104
denen entweder CID null oder DID ist null
Tabelle C:
CID DID Name
1 1 A
2 2 B
3 3 A
4 4 B
5 5 C
6 5 A
Tabelle D:
DID EID Name
1 1 Alpha
2 1 Bravo
3 1 Charlie
4 1 Echo
5 2 Delta
Tabelle E:
EID Name
1 Home
2 Away
Ich weiß, das ein wenig verwirrend sein kann, aber im Grunde können die Daten eines von zwei Dingen tun:
- Die Daten in Tabelle A kann die Verbindung B, dann C, dann D dann E oder
- Die Daten in Tabelle A können mit B verbunden werden, dann D, dann E
Mein Problem ist, dass ich eine SQL-Abfrage erstellen möchte, die alle Tabellen beitreten wird, wobei A.Name, A.AID und E.Name aus einer beliebigen Zeile mit B.Name LIKE '% Some name%' abgerufen werden. C.Name LIKE '% Name%', D.Name LIKE '% Name%' und E.Name LIKE '% Name%'.
so zum Beispiel möchte ich eine Abfrage, wenn ich E.Name LIKE '% Startseite%' gesetzt ist, wird die Abfrage zurück:
E.Name E.EID D.DID C.CID B.BID A.AID A.Name
Home 1 3 null 1 1 101
Home 1 3 null 1 2 102
Home 1 3 null 1 3 103
Home 1 4 null 2 4 103
Home 1 1 1 3 5 103
Home 1 2 2 4 6 103
Derzeit meine aktuelle Abfrage nur zurückgibt " zufällige "Daten, und damit meine ich, dass es etwas zurückgibt, aber nicht das Richtige, und ich kann nicht herausfinden, was die Zeilen, die es zurückgibt, gemeinsam haben, dass die Abfrage zieht. Aber im Grunde meine Frage ist:
select ... from tableA,
inner join tableB on A.BID=B.BID
inner join tableC on B.CID=C.CID
inner join tableD on C.DID=D.DID OR B.DID=D.DID
inner join E.EID = D.EID
WHERE E.Name LIKE '%Home%';
Irgendwelche Vorschläge wäre toll! Vielen Dank!!!
Ihre Abfrage, wie sie jetzt gestellt wird, kann die von Ihnen gepostete Ergebnismenge möglicherweise nicht zurückgeben. 'B.CID = C.CID' lässt keine NULL-Werte von' c.cid' zurück. – Quassnoi
@Aldwoni Entschuldigung für meinen kaputten Kommentar zu deinem Edit (Danke, das 'like' -Tag zu bereinigen, aber du solltest auch andere offensichtliche Fehler entfernen - wie zum Beispiel das Entfernen des" gelösten "Wortes aus dem Titel). – RandomSeed