Bạn không thể chọn một bảng để tham gia vào một câu lệnh tình huống. Bạn nên nối trái vào cả hai bảng, sau đó chọn giá trị từ một trong số chúng trong case
tuyên bố, như thế này:
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
Bạn có thể không cần biểu thức cuối cùng (...as user_id
một), vì nó sẽ bằng a.user_id
nếu có một hàng trong api_twitter
hoặc api_foursquare
khớp với a.user_id
.
Bạn cũng phải đặt WHERE
mệnh đề sau FROM
mệnh đề:
CHỈNH SỬA: Có tính đến đề xuất tuyệt vời của ypercube, truy vấn sẽ giống như sau:
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