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

SQL में xml कॉलम में एकाधिक मानों की खोज करें

पहला विकल्प यह होगा कि जहां क्लॉज मौजूद है वहां दूसरे को जोड़ा जाए।

declare @fruitId1 int;
set @fruitId1=1;

declare @fruitId2 int;
set @fruitId2=3;

select *
from @Test
where
  BasketFruits.exist('/FRUITS/FID[.=sql:variable("@fruitId1")]')=1 and
  BasketFruits.exist('/FRUITS/FID[.=sql:variable("@fruitId2")]')=1

एक अन्य संस्करण xquery कथन में हिट की गणना करते हुए दोनों चरों का उपयोग करना होगा।

select * 
from @Test
where BasketFruits.value(
  'count(distinct-values(/FRUITS/FID[.=(sql:variable("@fruitId1"),sql:variable("@fruitId2"))]))', 'int') = 2

ऊपर दिए गए दो प्रश्न ठीक काम करेंगे यदि आप जानते हैं कि क्वेरी लिखते समय आप कितने FID मापदंडों का उपयोग करने जा रहे हैं। यदि आप ऐसी स्थिति में हैं जहां FID की संख्या भिन्न होती है, तो आप इसके बजाय कुछ इस तरह का उपयोग कर सकते हैं।

declare @FIDs xml = '<FID>1</FID><FID>3</FID>'

;with cteParam(FID) as
(
  select T.N.value('.', 'int')
  from @FIDs.nodes('FID') as T(N)
)  
select T.BasketName
from @Test as T
  cross apply T.BasketFruits.nodes('/FRUITS/FID') as F(FID)
  inner join cteParam as p
    on F.FID.value('.', 'int') = P.FID
group by T.BasketName
having count(T.BasketName) = (select count(*) from cteParam)
 

क्वेरी में उपयोग किए जाने वाले मानों को रखने के लिए @FIDs वैरिएबल को XML के रूप में बनाएं।

आप यहां अंतिम क्वेरी का परीक्षण कर सकते हैं:https://data .stackexchange.com/stackoverflow/q/101600/relational-division-with-xquery



  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. pyODBC को SQL Server 2008 एक्सप्रेस R2 से कनेक्ट करने में असमर्थ

  3. PHP घातक त्रुटि:अपरिभाषित फ़ंक्शन mssql_query () पर कॉल करें

  4. SQL सर्वर 2008 स्प्लिट, सॉर्ट और मर्ज वैल्यू

  5. वाईएक्स से एसक्यूएल एक्सप्रेस बूटस्ट्रैपिंग?