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

मूल रिकॉर्ड खोजने के लिए पुनरावर्ती क्वेरी

इसे आजमाएं:

declare @t table (
 childID int,
 ParentID int,
 level int
)

insert into @t
select 71, 154, 4
union
select 154, 192, 3
union
select 192, 209, 2
union
select 209, 0, 1

Declare @SearchChild int
set @SearchChild=71

  ;with MyCTE as (
      select t1.childID, t1.ParentID , @SearchChild AS searchChild, t1.level
        from @t t1 
        where t1.childID = @SearchChild
      UNION ALL
      select t1.childID, t1.ParentID , c.SearchChild, t1.level
        from @t t1
        inner join MyCTE c on t1.childID=c.ParentID
  )
select top 1 * from MyCTE order by level asc

आउटपुट:

childID     ParentID    searchChild level
----------- ----------- ----------- -----------
209         0           71          1

मुझे यकीन नहीं है कि आप क्या चाहते हैं, ऐसी कोई पंक्ति नहीं है जिसमें 209 और 71 एक साथ हों? यह सबसे अच्छा है जो आप कर सकते हैं। साथ ही, यह सीटीई नीचे की ओर नहीं बल्कि श्रृंखला में काम करता है, और बड़े टेबल पर बेहतर काम करना चाहिए।



  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. क्या मुझे टी-एसक्यूएल में कैच ब्लॉक में रोलबैक एक से पहले लेनदेन की गणना करनी है?

  3. किसी मान को अनज़िप करने के लिए TSQL का उपयोग करना

  4. SQLDiag टूल का उपयोग करके प्रदर्शन डेटा एकत्र करें | SQL सर्वर प्रदर्शन समस्या निवारण -6

  5. एसएसआईएस में गतिशील रूप से इनपुट और आउटपुट कॉलम कैसे मैप करें?