sql >> Databasteknik >  >> RDS >> Mysql

MySQL-frågefel med CASE och INNER JOIN

Du kan inte välja en tabell att gå med i ett ärendeutlåtande. Du bör gå med från vänster till båda tabellerna och sedan välja värdet från en av dem i case uttalande, så här:

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

Du behöver förmodligen inte det sista uttrycket (...as user_id ett), eftersom det kommer att vara lika med a.user_id om det finns en rad i någon av api_twitter eller api_foursquare som matchar a.user_id .

Du måste också ange WHERE sats efter FROM klausul:

EDIT: Med hänsyn till ypercubes fantastiska förslag, skulle frågan se ut så här:

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


  1. Hur SQLite Length() fungerar

  2. Beräknar gps-koordinatradien

  3. Att hålla en applikationsdatabas agnostisk (ADO.NET vs inkapslande DB-logik)

  4. Genererar postgresql användarlösenord