I will describe my problem and also show you what I tried to do in order to solve it.
so first I have 3 tables like that:
I want to get the status and the orderNumber from the orders table for all the orders that the productLine include these 3 categories ( Vintage Cars, Classic Cars, Motorcycles)
x
SELECT o.status, o.orderNumber
FROM orders o
WHERE EXISTS(
SELECT p.productLine
FROM products p
WHERE p.productLine IN ('Vintage Cars', 'Classic Cars', 'Motorcycles'))
the query above is what I tried to do, but it returns me every row.
I think I don’t understand how it possible to check if the productLine includes Vintage Cars and Classic Cars and Motorcycles. thanks!
Advertisement
Answer
Use aggregation:
select o.status, o.orderNumber
from orders o join
orderdetails od
on o.ordernumber = od.ordernumber join
products p
on od.productcode = p.productcode
where p.productLine in ('Vintage Cars', 'Classic Cars', 'Motorcycles')
group by o.status, o.orderNumber
having count(distinct p.productLine) = 3;
The having
clause is checking that all three product lines are present in an order
.