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

इनर ज्वाइन पर क्रॉस एप्लाई कब लगाना चाहिए?

<ब्लॉकक्वॉट>

क्या कोई मुझे इसका एक अच्छा उदाहरण दे सकता है जब क्रॉस एप्लाई से उन मामलों में फर्क पड़ता है जहां इनर जॉइन भी काम करेगा?

विस्तृत प्रदर्शन तुलना के लिए मेरे ब्लॉग में लेख देखें:

  • INNER JOIN बनाम CROSS APPLY

CROSS APPLY उन चीजों पर बेहतर काम करता है जिनका कोई आसान नहीं है JOIN हालत।

यह एक 3 . का चयन करता है t2 . से अंतिम रिकॉर्ड t1 . से प्रत्येक रिकॉर्ड के लिए :

SELECT  t1.*, t2o.*
FROM    t1
CROSS APPLY
        (
        SELECT  TOP 3 *
        FROM    t2
        WHERE   t2.t1_id = t1.id
        ORDER BY
                t2.rank DESC
        ) t2o

इसे INNER JOIN . के साथ आसानी से तैयार नहीं किया जा सकता है हालत।

आप शायद CTE . का उपयोग करके ऐसा कुछ कर सकते हैं और विंडो फ़ंक्शन:

WITH    t2o AS
        (
        SELECT  t2.*, ROW_NUMBER() OVER (PARTITION BY t1_id ORDER BY rank) AS rn
        FROM    t2
        )
SELECT  t1.*, t2o.*
FROM    t1
INNER JOIN
        t2o
ON      t2o.t1_id = t1.id
        AND t2o.rn <= 3

, लेकिन यह कम पठनीय और शायद कम कुशल है।

अपडेट करें:

अभी चेक किया गया।

master लगभग 20,000,000 . की एक तालिका है PRIMARY KEY के साथ रिकॉर्ड करता है id . पर ।

यह प्रश्न:

WITH    q AS
        (
        SELECT  *, ROW_NUMBER() OVER (ORDER BY id) AS rn
        FROM    master
        ),
        t AS 
        (
        SELECT  1 AS id
        UNION ALL
        SELECT  2
        )
SELECT  *
FROM    t
JOIN    q
ON      q.rn <= t.id

लगभग 30 . के लिए चलता है सेकंड, जबकि यह एक:

WITH    t AS 
        (
        SELECT  1 AS id
        UNION ALL
        SELECT  2
        )
SELECT  *
FROM    t
CROSS APPLY
        (
        SELECT  TOP (t.id) m.*
        FROM    master m
        ORDER BY
                id
        ) q

तत्काल है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस और रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) क्या है

  2. एक कॉलम (टी-एसक्यूएल) में एकाधिक मान कैसे वापस करें?

  3. दिनांक सीमाओं के बीच दिनांक उत्पन्न करें

  4. जानिए बिना बैकअप के SQL Server 2012 में डिलीट हुई टेबल को कैसे रिकवर करें

  5. SQL सर्वर में IsInteger के लिए सर्वश्रेष्ठ समकक्ष