Nie możesz wybrać tabeli, do której chcesz dołączyć w oświadczeniu dotyczącym sprawy. Należy połączyć w lewo do obu tabel, a następnie wybrać wartość z jednej z nich w case
oświadczenie, takie jak:
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
Prawdopodobnie nie potrzebujesz ostatniego wyrażenia (...as user_id
jeden), ponieważ będzie równy a.user_id
jeśli istnieje wiersz w api_twitter
lub api_foursquare
pasujący do a.user_id
.
Musisz także umieścić WHERE
klauzula po FROM
klauzula:
EDYTUJ: Biorąc pod uwagę świetną sugestię ypercube, zapytanie wyglądałoby tak:
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