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