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
1)、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