У меня есть таблица SalesDetails, выглядящая так:
InvoiceID, LineID, Product
1,1,Apple
1,2,Banana
2,1,Apple
2,2,Mango
3,1,Apple
3,2,Banana
3,3,Mango
Мое требование состоит в том, чтобы возвращать строки, где в счете-фактуре были продажи обоих: Apple AND Banana, но если в таком счете есть другие продукты, я не хочу их.
Таким образом, результат должен быть:
1,1,Apple
1,2,Banana
3,1,Apple
3,2,Banana
Я попробовал следующее:
Select * from SalesDetails where Product = 'Apple'
Intersect
Select * from SalesDetails where Product = 'Banana'
Не работает, потому что кажется, что Intersect должен соответствовать всем столбцам.
Что я надеюсь сделать:
Select * from SalesDetails where Product = 'Apple'
Intersect ----On InvoiceID-----
Select * from SalesDetails where Product = 'Banana'
Есть ли способ сделать это?
Или мне нужно сначала пересечься по InvoiceIDs только с использованием моих критериев, а затем выбрать строки из этих InvoiceID, где критерии снова совпадают, I.e.:
Select * From SalesDetails
Where Product In ('Apple', 'Banana') And InvoiceID In
(
Select InvoiceID from SalesDetails where Product = 'Apple'
Intersect
Select InvoiceID from SalesDetails where Product = 'Banana'
)
Это кажется несколько расточительным, поскольку он дважды проверяет критерии.