Non puoi scegliere un tavolo da unire in una dichiarazione del caso. Dovresti unire a sinistra entrambe le tabelle, quindi scegliere il valore da una di esse nel case
dichiarazione, in questo modo:
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
Probabilmente non hai bisogno dell'ultima espressione (il ...as user_id
uno), perché sarà uguale a a.user_id
se è presente una riga in uno dei due api_twitter
o api_foursquare
che corrisponde a a.user_id
.
Devi anche mettere il WHERE
clausola dopo il FROM
clausola:
MODIFICA: Tenendo conto dell'ottimo suggerimento di ypercube, la query sarebbe simile a questa:
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