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

जटिल SQL क्वेरी - कई अलग-अलग विदेशी कुंजियों से मेल खाने वाले आइटम ढूंढना

बशर्ते कि आपके पास (ProductID, CategoryID) . दोनों पर अद्वितीय सूचकांक हों और (ProductID, InvoiceID) :

SELECT  ProductID
FROM    (
        SELECT  ProductID
        FROM    ProductInvoice
        WHERE   InvoiceID IN (1, 2)
        UNION ALL
        SELECT  ProductID
        FROM    ProductCategory pc
        WHERE   CategoryID IN (3, 4)
        ) q
GROUP BY
        ProductID
HAVING  COUNT(*) = 4

या, यदि आपके मान CSV . में पास किए गए हैं तार:

WITH    catids(value) AS
        (
        SELECT  DISTINCT CAST([value] AS INT)
        FROM    dbo.split(@categories, ' '))
        ), 
        (
        SELECT  DISTINCT CAST([value] AS INT)
        FROM    dbo.split(@invoices, ' '))
        )
SELECT  ProductID
FROM    (
        SELECT  ProductID
        FROM    ProductInvoice
        WHERE   InvoiceID IN
                (
                SELECT  value
                FROM    invoiceids
                )
        UNION ALL
        SELECT  ProductID
        FROM    ProductCategory pc
        WHERE   CategoryID IN
                (
                SELECT  value
                FROM    catids
                )
        ) q
GROUP BY
        ProductID
HAVING  COUNT(*) = 
        (
        SELECT  COUNT(*)
        FROM    catids
        ) + 
        (
        SELECT  COUNT(*)
        FROM    invoiceids
        )

ध्यान दें कि SQL Server 2008 . में आप तालिका-मूल्यवान पैरामीटर को संग्रहीत कार्यविधियों में पास कर सकते हैं।



  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 सर्वर CPU प्रदर्शन समस्याओं का निवारण

  2. RODBC sqlSave तालिका निर्माण समस्याएं

  3. SQL सर्वर में सर्वर जानकारी प्राप्त करने के लिए SERVERPROPERTY () का उपयोग करें

  4. एसएसआरएस - Group_Concat एक अभिव्यक्ति का उपयोग कर समतुल्य?

  5. SQL सर्वर में ALL का उपयोग करने के 3 तरीके