sql >> Databáze >  >> RDS >> Sqlserver

Příkaz SQL pro výběr skupiny obsahující všechny ze sady hodnot

Pokud tabulka OrderDetails obsahuje jedinečné omezení OrderId a ProductId, můžete udělat něco takového:

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
                )

Pokud je možné mít stejné ProductId ve stejné objednávce vícekrát, můžete změnit klauzuli Having na Count(Distinct ProductId) = 3

Nyní, vzhledem k výše uvedenému, pokud chcete situaci, kdy má každá objednávka stejný podpis s duplicitními položkami produktu, je to složitější. K tomu byste potřebovali podpis příslušné objednávky nad danými produkty a poté dotaz na tento podpis:

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. Chyba:Objekt třídy CI_DB_mysql_result nelze převést na řetězec

  2. Zabezpečení hesla MySQL při vývoji v Pythonu?

  3. SQL Server 2008 na SQL Server Compact Edition?

  4. Rozsah nastavení počtu řádků v SQL