Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

केस और इनर जॉइन के साथ MySQL क्वेरी त्रुटि

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL वाइल्डकार्ड बदलें

  2. MySQL क्वेरी स्ट्रिंग में शामिल हैं

  3. Yii2 . में रिलेशनल डेटा कैसे दिखाएं

  4. Django में सेट क्वेरी में एक रिकॉर्ड की कई पंक्तियों से संबंधित फ़ील्ड का संयोजन

  5. mysql के डिफ़ॉल्ट पथ को कैसे बदलें (आउटफाइल में) csv पथ