यदि ऑर्डर विवरण तालिका में ऑर्डर आईडी और उत्पाद आईडी पर एक अद्वितीय बाधा है, तो आप ऐसा कुछ कर सकते हैं:
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 को एक ही ऑर्डर पर कई बार रखना संभव है, तो आप होने वाले क्लॉज को 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