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

MYSQL जॉइन रिजल्ट्स सेट वाइप रिजल्ट्स IN () के दौरान क्लॉज में कहां?

इस बारे में सोचें कि आपका कोड तार्किक रूप से क्या कर रहा है:

( 1 IN (tag.tag_id) ) AND ( 2 IN (tag.tag_id) )

के बराबर है

( 1 = (tag.tag_id) ) AND (2 = (tag.tag_id) )

कोई रास्ता नहीं है tag.tag_id एक ही समय में दोनों शर्तों को पूरा कर सकता है, इसलिए AND कभी भी सत्य नहीं होता है।

ऐसा लगता है कि आपने अपने प्रश्न में जिस OR संस्करण का उल्लेख किया है, वह वही है जो आप वास्तव में चाहते हैं:

SELECT DISTINCT name FROM person LEFT JOIN tag ON person.id = tag.person_id 
  WHERE ( ( 1 IN (tag.tag_id) ) OR ( 2 IN (tag.tag_id) ) );   

IN क्लॉज का अधिक उचित उपयोग करते हुए, आप इसे इस प्रकार लिख सकते हैं:

SELECT DISTINCT name FROM person LEFT JOIN tag ON person.id = tag.person_id 
  WHERE tag.tag_id in (1,2);   

एक अंतिम नोट, क्योंकि आप अपने WHERE क्लॉज (tag.tag_id में LEFT JOINed टेबल से एक कॉलम को रेफर कर रहे हैं। ), आप वास्तव में इसे इनर जॉइन की तरह व्यवहार करने के लिए मजबूर कर रहे हैं। वास्तव में LEFT JOIN प्राप्त करने के लिए, आपको मानदंड को WHERE से बाहर ले जाना होगा और इसके बजाय इसे JOIN शर्तों का हिस्सा बनाना होगा:

SELECT DISTINCT name FROM person LEFT JOIN tag ON person.id = tag.person_id 
  AND tag.tag_id in (1,2);   


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 1114 (HY000):तालिका भरी हुई है

  2. mysql में मिलीसेकंड या माइक्रोसेकंड में लोड समय कैसे प्राप्त करें?

  3. क्या मुझे पंजीकरण फॉर्म में दर्ज पासवर्ड mysql_real_escape_string करना चाहिए?

  4. परिणामों को पृष्ठांकित करते समय बाद के पृष्ठों में स्थानांतरित करने के लिए क्वेरी कैसे प्राप्त करें

  5. mysql दिनांक में पार्सिंग स्ट्रिंग