sql >> Database teknologi >  >> RDS >> Sqlserver

SQL-sætning for at vælge gruppe, der indeholder alle et sæt værdier

Hvis tabellen OrderDetails indeholder en unik begrænsning på OrderId og ProductId, kan du gøre noget som dette:

Select ...
From Orders As O
Where Exists    (
                Select 1
                From OrderDetails As OD1
                Where OD1.ProductId In(1,2,3)
                    And OD1.OrderId = O.Id
                Group By OD1.OrderId
                Having Count(*) = 3
                )

Hvis det er muligt at have det samme produkt-id på den samme ordre flere gange, kan du ændre Having-klausulen til Count(Distinct ProductId) = 3

I betragtning af ovenstående, hvis du vil have situationen, hvor hver ordre har den samme signatur med duplikerede produktposter, er det vanskeligere. For at gøre det skal du have underskriften på den pågældende ordre over de pågældende produkter og derefter forespørge efter denne signatur:

With OrderSignatures As
    (
    Select O1.Id
        ,   (
            Select '|' + Cast(OD1.ProductId As varchar(10))
            From OrderDetails As OD1
            Where OD1.OrderId = O1.Id
            Order By OD1.ProductId
            For Xml Path('')
            ) As Signature
    From Orders As O1
    )
Select ...
From OrderSignatures As O
    Join OrderSignatures As O2
        On O2.Signature = O.Signature
            And O2.Id <> O.Id
Where O.Id = 5


  1. MariaDB Backup &PostgreSQL i skyen - ClusterControl Release 1.6.1

  2. CASE WHEN in WHERE-klausulen fejler med en fejl, der mangler nøgleord

  3. Hvordan kan jeg opdele forespørgselsresultatet i separate kolonner?

  4. Indsæt lille ordbog som {1:23, 2:45, 3:17} i en kolonne af SQL-databasetabellen i Postgres ved hjælp af python-sprog