आप केस स्टेटमेंट में शामिल होने के लिए टेबल नहीं चुन सकते। आपको दोनों टेबलों में लेफ्ट-जॉइन करना चाहिए, और फिर 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
one), क्योंकि यह 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