Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Abfragefehler mit CASE und INNER JOIN

Sie können keinen Tisch auswählen, um ihn in einer Case-Anweisung zu verbinden. Sie sollten beide Tabellen linksverknüpfen und dann den Wert aus einer von ihnen im case auswählen Anweisung, etwa so:

SELECT a.user_id, 
       a.api_type,
       (case WHEN a.api_type = 0 THEN b.avatar ELSE c.avatar END) as avatar,
       (case WHEN a.api_type = 0 THEN b.user_id ELSE c.user_id END) as user_id
FROM a 
  LEFT OUTER JOIN api_foursquare b ON b.user_id = a.user_id
  LEFT OUTER JOIN api_twitter c ON c.user_id = a.user_id
WHERE a.cookie_hash = :cookie_hash

Wahrscheinlich brauchen Sie den letzten Ausdruck (den ...as user_id) nicht eins), weil es gleich a.user_id sein wird wenn es eine Zeile in einem der beiden api_twitter gibt oder api_foursquare die mit a.user_id übereinstimmt .

Sie müssen auch das WHERE eingeben -Klausel nach FROM Klausel:

BEARBEITEN: Unter Berücksichtigung des großartigen Vorschlags von ypercube würde die Abfrage wie folgt aussehen:

SELECT a.user_id, 
       a.api_type,
       COALESCE(b.avatar, c.avatar) as avatar
FROM a 
  LEFT OUTER JOIN api_foursquare b ON b.user_id = a.user_id AND a.api_type = 0
  LEFT OUTER JOIN api_twitter c ON c.user_id = a.user_id and a.api_type = 1
WHERE a.cookie_hash = :cookie_hash