Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL израз за избор на група, съдържаща целия набор от стойности

Ако таблицата OrderDetails съдържа уникално ограничение за OrderId и ProductId, тогава можете да направите нещо подобно:

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
                )

Ако е възможно да имате един и същ ProductId за една и съща поръчка няколко пъти, можете да промените клаузата Having на Count(Distinct ProductId) = 3

Сега, като се има предвид горното, ако искате ситуацията, при която всяка поръчка има един и същ подпис с дублиращи се въведени продукти, това е по-сложно. За да направите това, ще ви е необходим подпис на въпросната поръчка над въпросните продукти и след това потърсете този подпис:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2016:Възстановяване на база данни

  2. Как да копирам база данни SQL Azure на моя локален сървър за разработка?

  3. Вмъкване и трансформиране на данни от SQL таблица

  4. Разделяне на разделени стойности в SQL колона на множество реда

  5. SQL Server 2005 възстановява само една схема