Не можете да изберете таблица, която да се присъедините в изявление за case. Трябва да се присъедините вляво към двете таблици и след това да изберете стойността от една от тях в case
изявление, като това:
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
Вероятно нямате нужда от последния израз (...as user_id
едно), защото ще бъде равно на a.user_id
ако има ред в api_twitter
или api_foursquare
който съответства на a.user_id
.
Вие също трябва да поставите WHERE
клауза след FROM
клауза:
РЕДАКТИРАНЕ: Като се вземе предвид страхотното предложение на ypercube, заявката ще изглежда така:
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