Schachteln INNER JOINs, mit UNION fordert in SQL - ziemlich verloren
Ich habe eine friends
Tabelle: id
, fid1
, fid2
stellt eine Freundschaft zwischen zwei Nutzern (bidirektional).
und ein users
Tabelle: fid
,name
Ich würde gerne eine Funktion oder Abfrage, die
- Benutzer-id
und gibt
- die Liste der Freunde (Benutzer von.fid, der Benutzer.name) steht für all die Freunde, die Freunde mit original-Benutzer-id
Ich habe Probleme mit Verschachtelung-JOINs und UNIONs. Ich brauche die UNION, um sicherzustellen, dass ich alle Freundschaften (aber auch nicht bekommen, Duplikate). Dies ist, was ich habe, so weit:
SELECT fid1 as friends FROM friendships WHERE fid2 = 123456
INNER JOIN users
ON friendships.fid1 = users.fid
UNION ALL (
SELECT fid2 as friends FROM friendships WHERE fid1 = 123456
INNER JOIN users
ON friendships.fid2 = users.fid
)
ist ein Fehler:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN users ON friendships.fid1 = users.fid UNION ALL ( SELECT fid2' at line 2
in der Regel ich habe Probleme mit den Befehlen, weil ich nicht verstehen, wie SQL behandelt Ergebnisse - in normalen Programmiersprachen würde ich pass das Ergebnis der INNEREN Schließt sich an die Gewerkschaften und wenden Sie dann diese Funktion. Aber ich bin immer ein wenig verloren hier. Irgendwelche Gedanken?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre
WHERE
gehen muss nach derJOIN
Visuelle Artikel über Verbindet
Informationen auf MySQL SELECT-syntax
Wie Sie sehen können aus die
SELECT
syntax, verbinden Sie alle Ihre Tische zusammen, dann gelten die Filter (WHERE-Klauseln). Dies erstellt eine Ergebnismenge. Sie können dannUNION
, die zu einem anderen Ergebnis das gleiche format haben (Gleiche Anzahl von Spalten, gleiche Datentypen).Einen
UNION
zurückkehren wird, alle unterschiedlichen Datensätze und einUNION ALL
wird es wieder den ersten Datensatz, dann der zweite Datensatz, der Aufrechterhaltung der Ordnung.Option 2
Option 3
Ich bin nicht sicher, was besser für Sie ist, können es testen wollen, die unter Ihrem real-world-Bedingungen, mine zeigten alle drei durchgeführt ähnlich, aber ich habe sehr wenig Daten und keine Indizes für meine Prüfung.