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

Transact SQL में NOT EXISTS के विपरीत EXCEPT का उपयोग कब करें?

EXCEPT व्यवहार करता है NULL मिलान के रूप में मान।

यह प्रश्न:

WITH    q (value) AS
        (
        SELECT  NULL
        UNION ALL
        SELECT  1
        ),
        p (value) AS
        (
        SELECT  NULL
        UNION ALL
        SELECT  2
        )
SELECT  *
FROM    q
WHERE   value NOT IN
        (
        SELECT  value
        FROM    p
        )

एक खाली रोसेट लौटाएगा।

यह प्रश्न:

WITH    q (value) AS
        (
        SELECT  NULL
        UNION ALL
        SELECT  1
        ),
        p (value) AS
        (
        SELECT  NULL
        UNION ALL
        SELECT  2
        )
SELECT  *
FROM    q
WHERE   NOT EXISTS
        (
        SELECT  NULL
        FROM    p
        WHERE   p.value = q.value
        )

वापस आ जाएगा

NULL
1

, और यह वाला:

WITH    q (value) AS
        (
        SELECT  NULL
        UNION ALL
        SELECT  1
        ),
        p (value) AS
        (
        SELECT  NULL
        UNION ALL
        SELECT  2
        )
SELECT  *
FROM    q
EXCEPT
SELECT  *
FROM    p

वापस आ जाएगा:

1

EXCEPT . में पुनरावर्ती संदर्भ की भी अनुमति है पुनरावर्ती CTE में खंड , हालांकि यह एक अजीब तरीके से व्यवहार करता है:यह अंतिम पंक्ति . को छोड़कर सब कुछ लौटाता है पिछले सेट का, पूरे पिछले सेट को छोड़कर सब कुछ नहीं:

WITH    q (value) AS
        (
        SELECT  1
        UNION ALL
        SELECT  2
        UNION ALL
        SELECT  3
        ),
        rec (value) AS
        (
        SELECT  value
        FROM    q
        UNION ALL
        SELECT  *
        FROM    (
                SELECT  value
                FROM    q
                EXCEPT
                SELECT  value
                FROM    rec
                ) q2
        )
SELECT  TOP 10 *
FROM    rec

---
1
2
3
-- original set
1
2
-- everything except the last row of the previous set, that is 3
1
3
-- everything except the last row of the previous set, that is 2
1
2
-- everything except the last row of the previous set, that is 3, etc.
1

SQL Server डेवलपर्स इसे मना करना भूल गए होंगे।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर MySQL एनम डेटा प्रकार के बराबर है?

  2. SQL सर्वर में DELETE पास-थ्रू क्वेरी कैसे करें

  3. डेटाबेस के लिए लेनदेन लॉग भरा हुआ है

  4. SQL सर्वर नेटवर्क इंटरफेस:कनेक्शन स्ट्रिंग मान्य नहीं है [87]

  5. SQL सर्वर एक मिलीसेकंड क्यों खो रहा है?