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