2017-10-29 3 views
0

Ich bin ein Anfänger SQL-Er versucht, die Ergebnisse von zwei unabhängigen Abfragen in eine Tabelle zu verbinden. Ich habe in SO so viele Beispiele mit JOIN, UNION, verschachtelten SELECT-Anweisungen usw. betrachtet, aber keine scheint zu funktionieren. Hier sind meine Tabellen und relevanten Spalten:MySQL Join Ergebnisse von zwei unabhängigen Abfragen

Benutzer: user_ID | Benutzername

Ereignisse: event_ID | Benutzer_ID | user_ID_affected

Die Situation ist ein Multiplayer-Spiel. Was ich versuche zu tun ist "Lookup" Benutzernamen auf der Grundlage von Benutzer-IDs für jedes Ereignis, das auftritt. Ich kann den Benutzernamen von Benutzern basierend auf einem Ereignis in Ereignisse abrufen, aber nicht den Benutzernamen von Benutzern gleichzeitig.

Hier sind meine Fragen, die sowohl einzeln arbeiten:

SELECT Events.event_ID AS eventID, Events.user_ID AS userID, Users.username 
AS username1, Events.user_ID_affected AS userIDAffected 
FROM Events 
LEFT JOIN Users ON Events.user_ID = Users.user_ID 
WHERE Events.event_ID > 11337 
ORDER BY Events.event_ID ASC; 

und:

SELECT Users.username AS usernameAffected 
FROM Users 
WHERE Users.user_ID = Events.user_ID_affected; 

Aber versuchen Sie, wie ich könnte ich sie nicht kombinieren. Die Ausgabe, die ich hoffe, ist ein Ergebnis mit Spalten wie folgt:

eventID | BenutzerID | Benutzername1 | userIDbetroffen | usernameAffected

Irgendwelche Gedanken?

+0

'arbeiten beide individually' .. Ihre zweite Abfrage wird nicht einmal ausgeführt. –

+0

Sie haben Recht Tim - und jetzt kann ich die Abfrage nicht finden, die funktioniert :(Aber die Logik ist die gleiche: Nachschlagen Benutzernamen aus der Tabelle Benutzer, wo die Benutzer-ID der Benutzer-ID aus diesem Ereignis entspricht. – Arj

+0

Können Sie uns Beispieldaten zeigen zusammen mit Ihrer erwarteten Ausgabetabelle? –

Antwort

1

Ich glaube, alles, was Sie brauchen hier zweimal auf die Users Tabelle zu verbinden ist, einmal für den Benutzer, und ein zweites Mal für den Benutzer die Aktion Aufnahme wirkt:

SELECT 
    e.event_ID AS eventID, 
    e.user_ID AS userID, 
    u1.username AS username, 
    e.user_ID_affected AS userID_affected, 
    u2.username AS username_affected 
FROM Events e 
LEFT JOIN Users u1 
    ON e.user_ID = u1.user_ID 
LEFT JOIN Users u2 
    ON e.user_ID_affected = u2.user_ID 
WHERE 
    e.event_ID > 11337 
ORDER BY 
    e.event_ID ASC;