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

कीवर्ड में MYSQL NULL मानों पर विचार क्यों नहीं कर रहा है

यह:

Error not in ('Timeout','Connection Error');

शब्दार्थ के बराबर है:

Error <> 'TimeOut' AND Error <> 'Connection Error'

शून्य तुलना के नियम IN पर भी लागू होते हैं। इसलिए यदि Error का मान NULL है, तो डेटाबेस व्यंजक को सत्य नहीं बना सकता।

ठीक करने के लिए, आप यह कर सकते हैं:

COALESCE(Error,'') not in ('Timeout','Connection Error');

या बेहतर अभी तक:

Error IS NULL OR Error not in ('Timeout','Connection Error');

या इससे भी बेहतर:

 CASE WHEN Error IS NULL THEN 1
 ELSE Error not in ('Timeout','Connection Error') THEN 1
 END = 1

OR शॉर्ट-सर्किट नहीं करता, CASE किसी तरह आपकी क्वेरी को शॉर्ट-सर्किट कर सकता है

शायद एक ठोस उदाहरण यह बता सकता है कि क्यों NULL NOT IN expression कुछ नहीं लौटाता:

इस डेटा को देखते हुए:http://www.sqlfiddle.com/#!2/0d5da /11

create table tbl
(
  msg varchar(100) null,
  description varchar(100) not null
  );


insert into tbl values
('hi', 'greet'),
(null, 'nothing');

और आप यह अभिव्यक्ति करते हैं:

select 'hulk' as x, msg, description 
from tbl where msg not in ('bruce','banner');

वह केवल 'हाय' आउटपुट करेगा।

NOT IN का अनुवाद इस प्रकार किया जाता है:

select 'hulk' as x, msg, description 
from tbl where msg <> 'bruce' and msg <> 'banner';

NULL <> 'bruce' निर्धारित नहीं किया जा सकता, सत्य भी नहीं, असत्य भी नहीं

NULL <> 'banner' निर्धारित नहीं किया जा सकता, सत्य भी नहीं झूठ भी नहीं

तो शून्य मान अभिव्यक्ति, प्रभावी ढंग से हल की गई:

can't be determined AND can't bedetermined

वास्तव में, यदि आपका RDBMS SELECT (जैसे MySQL, Postgresql) पर बूलियन का समर्थन करता है, तो आप देख सकते हैं कि क्यों:http://www.sqlfiddle.com/#!2/d41d8/828

select null <> 'Bruce' 

वह शून्य लौटाता है।

यह शून्य भी लौटाता है:

select null <> 'Bruce' and null <> 'Banner'

यह देखते हुए कि आप NOT IN . का उपयोग कर रहे हैं , जो मूल रूप से एक AND अभिव्यक्ति है।

NULL AND NULL

परिणाम शून्य के लिए। तो यह ऐसा है जैसे आप एक कर रहे हैं:http://www.sqlfiddle.com/# !2/0d5da/12

select * from tbl where null

कुछ भी वापस नहीं किया जाएगा



  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. टैग1 और टैग2 के साथ पोस्ट ढूँढना? (एक जॉइन-टेबल का उपयोग करके) मौजूद/होने/सबक्वायरी... क्या उपयोग करें?

  3. MySQL में nth रैंक कैसे पता करें?

  4. UUID को नंबर के रूप में कैसे स्टोर करें?

  5. MySQL में संग्रहीत कार्यविधि को कैसे शेड्यूल करें