Wenn die OrderDetails-Tabelle eine eindeutige Einschränkung für OrderId und ProductId enthält, können Sie etwa so vorgehen:
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
)
Wenn es möglich ist, dieselbe ProductId mehrmals in derselben Bestellung zu haben, können Sie die Having-Klausel in Count(Distinct ProductId) = 3
ändern
Wenn Sie nun angesichts der obigen Ausführungen die Situation wünschen, in der jede Bestellung dieselbe Signatur mit doppelten Produkteinträgen hat, ist das schwieriger. Dazu benötigen Sie die Signatur der betreffenden Bestellung über den betreffenden Produkten und fragen dann nach dieser 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