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

MySQL "नहीं में" क्वेरी 3 टेबल

NOT IN से बचें प्लेग की तरह अगर

SELECT ID_Courses FROM Evaluation where `NAME`='JOHN' and Year=1

कभी भी NULL हो सकता है। इसके बजाय, NOT EXISTS या लेफ्ट जॉइन का उपयोग करें

स्पष्ट जॉइन का उपयोग करें, न कि 1980 की स्टाइल जॉइन WHERE . का उपयोग करके खंड

NOT IN की दुर्दशा को दर्शाने के लिए:

SQL नॉट इन () खतरे

create table mStatus
(   id int auto_increment primary key,
    status varchar(10) not null
);
insert mStatus (status) values ('single'),('married'),('divorced'),('widow');

create table people
(   id int auto_increment primary key,
    fullName varchar(100) not null,
    status varchar(10)  null
);

चंक1:

truncate table people;
insert people (fullName,`status`) values ('John Henry','single');
select * from mstatus where `status` not in (select status from people);

**3 पंक्तियाँ, जैसा कि अपेक्षित था **

चंक2:

truncate table people;
insert people (fullName,`status`) values ('John Henry','single'),('Kim Billings',null);
select * from mstatus where status not in (select status from people);

कोई पंक्ति नहीं, हुह?

जाहिर है यह 'गलत' है। यह SQL के तीन-मूल्यवान तर्क के उपयोग से उत्पन्न होता है, जो NULL के अस्तित्व से प्रेरित होता है, एक गैर-मूल्य जो लापता (या UNKNOWN) जानकारी का संकेत देता है। NOT IN, Chunk2 के साथ इसका अनुवाद इस तरह किया जाता है:

status NOT IN ('married', 'divorced', 'widowed', NULL)

यह इसके बराबर है:

NOT(status='single' OR status='married' OR status='widowed' OR status=NULL)

अभिव्यक्ति "status=NULL" UNKNOWN का मूल्यांकन करती है और, तीन-मूल्यवान लॉजिक के नियमों के अनुसार, NOT UNKNOWN भी UNKNOWN का मूल्यांकन करती है। परिणामस्वरूप, सभी पंक्तियों को फ़िल्टर कर दिया जाता है और क्वेरी एक खाली सेट लौटा देती है।

संभावित समाधानों में शामिल हैं:

select s.status
from mstatus s
left join people p
on p.status=s.status
where p.status is null

या not exists . का उपयोग करें



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP और MySQL पेजिनेशन

  2. PHP/MYSQL में एक के रूप में दो mysql प्रश्नों को कैसे निष्पादित करें?

  3. एकल क्वेरी में एकाधिक चयन कथन

  4. प्रति उपयोगकर्ता नवीनतम तिथि वाली पंक्ति का चयन करें

  5. Django की प्राथमिक कुंजी को एक अलग पूर्णांक के साथ कैसे बदलें जो उस तालिका के लिए अद्वितीय है