2016-04-08 14 views
1

Ich habe eine MySQL-Anfrage unten und es funktioniert nicht richtig.MySQL-Fallanweisung mit linker Join-Bedingung

Fehler:

#1054 - Unknown column 'uid' in 'on clause'

Abfrage:

SELECT 
    u.email, 
    CASE 
    WHEN c.from_user_id = '301' THEN c.to_user_id 
    WHEN c.to_user_id = '301' THEN c.from_user_id 
    END AS uid 
FROM `contacts` AS c 
LEFT JOIN `users` AS u 
ON u.id = uid 
HAVING uid >0 

Wie kann ich die richtige Anfrage schreiben?

+0

Warum verwenden Sie 'LEFT JOIN' anstelle von' INNER JOIN'? Gibt es Benutzer-IDs in 'Kontakten', die nicht in' Benutzer' sind? – Barmar

Antwort

1

Sie können nicht auf eine Spalte Alias ​​in der WHERE Klausel der gleichen SELECT finden, weil WHERE verwendet wird, um die Zeilen zu finden, bevor die SELECT Klausel auf sie arbeitet. Setzen Sie das in eine Unterabfrage.

SELECT u.email, c.uid 
FROM (SELECT CASE 
       WHEN from_user_id = '301' THEN to_user_id 
       ELSE from_user_id 
      END AS uid 
     FROM contacts 
     WHERE from_user_id = '301' OR to_user_id = '301') AS c' 
LEFT JOIN users AS u 
ON u.id = c.uid 
+0

Vielen Dank! Es ist sehr wichtig, dass Sie Menschen helfen! – user889349