sql - इसके विपरीत परिणाम नहीं लौट रहा है




sql-server tsql (4)

  1. Select * from tbl1 
    WHERE ([TextCol] NOT LIKE '%TAX%') AND ([TextCol] NOT LIKE '%TAX%')
  2. select * from tbl1
    where [TextCol] NOT LIKE '%TAX%' OR [TextCol] IS NULL

मेरे पास 200 रिकॉर्ड के साथ एक तालिका है जिसमें से 10 रिकॉर्ड में टेक्स्ट है जिसमें 'TAX' शब्द है।

जब मैं निष्पादित कर रहा हूं

Select * from tbl1 WHERE [TextCol] LIKE '%TAX%'

फिर मुझे उन 10 रिकॉर्डों के साथ परिणाम ठीक से मिल गया।

लेकिन जब मैं उन रिकॉर्ड्स को बाहर करने की कोशिश कर रहा हूं

Select * from tbl1 WHERE [TextCol] NOT LIKE '%TAX%'

यह 190 के बजाय केवल 100 रिकॉर्ड वापस कर रहा है।


आपको NULL मान के लिए भी जाँच करने की आवश्यकता है:

    [TextCol] NOT LIKE '%TAX%' OR [TextCol] IS NULL

यह अशक्त मानों का भी ध्यान रखना चाहिए, यही कारण है कि आपको आउटपुट में सभी पंक्तियाँ नहीं मिलीं।


क्या यह सही परिणाम देता है?

Select * from tbl1 WHERE COALESCE([TextCol],'-1') NOT LIKE '%TAX%'

मेरा मानना NULL कि NULL मान यहाँ समस्या है, यदि स्तंभ में उन्हें शामिल किया गया है, तो NULL NOT LIKE '%TAX%' UNKNOWN/NULL को लौटाएगा और इसलिए उसका चयन नहीं किया जाएगा।

मैं आपको सलाह देता हूं कि आप NULL मानों से निपटने के बारे में या here पढ़ें।

जैसा कि @ughai ने सुझाव दिया, यदि प्रदर्शन एक ऐसा मुद्दा है जिसका आप उपयोग भी कर सकते हैं:

  Select * from tbl1 
  WHERE [TextCol] NOT LIKE '%TAX%'
     OR [TextCol] IS NULL

मैं नल के साथ सरल int कॉलम पर IN ऑपरेटर के साथ एक ही समस्या थी। मैंने पाया कि ये जहां एक-दूसरे के विपरीत नहीं हैं जैसा मैंने सोचा था। (मैं पंक्ति गणना द्वारा बता सकता था)

select * from Dest where id in(select id from Source)
select * from Dest where id NOT in(select id from Source)

एक-दूसरे को उल्टा करने के लिए मैंने उन्हें इस तरह से फिर से लिखा था:

select * from Dest where isnull(id,-2)  in(select isnull(id,-1) from Source) 
select * from Dest where isnull(id,-2) NOT in(select isnull(id,-1) from Source) 






sql-like