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

क्या 2 मानों की NULL तुलना को सरल बनाने का कोई तरीका है

हां आप कर सकते हैं, और आप अनुकूलक को इसे पहचानने के लिए भी प्राप्त कर सकते हैं।

पॉल व्हाइट के पास यह छोटा सा किस्सा है :

WHERE NOT EXISTS (
    SELECT d.[Data]
    INTERSECT
    SELECT i.[Data])

यह INTERSECT . के शब्दार्थ के कारण काम करता है जो नल से निपटते हैं। यह क्या कहता है "क्या वहाँ नहीं . है मान B और मान B से बनी सबक्वेरी में पंक्तियाँ", यह केवल तभी संतुष्ट होगी जब वे अलग-अलग मान हों या एक अशक्त हो और दूसरा नहीं। यदि दोनों नल हैं, तो एक अशक्त के साथ एक पंक्ति होगी।

यदि आप एक्सएमएल क्वेरी प्लान (एसएसएमएस में ग्राफिकल नहीं) की जांच करते हैं, तो आप देखेंगे कि यह d.[Data] <> i.[Data] तक सभी तरह से संकलित है। , लेकिन इसके द्वारा उपयोग किए जाने वाले ऑपरेटर के पास CompareOp="IS" . होगा और नहीं EQ

पूरी योजना देखें यहां

योजना का प्रासंगिक हिस्सा है:

                <Predicate>
                  <ScalarOperator ScalarString="@t1.[i] as [t1].[i] = @t2.[i] as [t2].[i]">
                    <Compare CompareOp="IS">
                      <ScalarOperator>
                        <Identifier>
                          <ColumnReference Table="@t1" Alias="[t1]" Column="i" />
                        </Identifier>
                      </ScalarOperator>
                      <ScalarOperator>
                        <Identifier>
                          <ColumnReference Table="@t2" Alias="[t2]" Column="i" />
                        </Identifier>
                      </ScalarOperator>
                    </Compare>
                  </ScalarOperator>
                </Predicate>

मुझे लगता है कि ऑप्टिमाइज़र EXISTS / EXCEPT करने के बजाय इस तरह से बहुत अच्छी तरह से काम करता है ।

मैं आपसे एज़्योर फीडबैक एक उचित ऑपरेटर को लागू करने के लिए



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. टी-एसक्यूएल में एक सप्ताह की संख्या से तिथियां प्राप्त करें

  2. 2017 से पहले SQL सर्वर के लिए String_agg

  3. यह देखने के 2 तरीके हैं कि SQL सर्वर इंस्टेंस में अभी भी बहिष्कृत सुविधाओं का उपयोग किया जा रहा है या नहीं

  4. System.ArgumentException:तालिका प्रकार पैरामीटर में एक मान्य प्रकार का नाम होना चाहिए

  5. प्रत्येक कर्मचारी के लिए सभी पंच प्राप्त करें?