I need to find the distinct drinkers that ordered \'VODKA\' and \'WHISKY\'. I AM ONLY ALLOWED TO USE A NESTED QUERY. No other format is accepted.
I am quite new to sql
You could use an hanving for count distinct drink group by DRINKER
SELECT DRINKERS.DRINKER
FROM DRINKERS
INNER JOIN ORDERS DRINKERS.DRINKER = ORDERS.DRINKER
WHERE ORDERS.DRINK IN ( 'VODKA' , 'WHISKY')
GROUP BY DRINKER
HAVING COUNT(DISTINCT ORDERS.DRINK ) = 2
or if you need a nested
SELECT DISTINCT DRINKER
FROM DRINKERS
WHERE EXISTS (SELECT DRINKER
FROM ORDERS
WHERE DRINK IN ( 'VODKA' AND 'WHISKY')
GROUP BY DRINKER
HAVING COUNT(DISTINCT ORDERS.DRINK ) = 2
);
I think this will get you what you want. In the inner query you get two lines for a drinker if they drank both VODKA and WHISKY otherwise you get 1 or 0.
The HAVING COUNT(*)=2 just returns those that had both. Then you just get the distinct DRINKER list.
Since the DRINKER column appears in the ORDERS table, you do not need to reference the DRINKERS table at all.
SELECT DISTINCT DRINKER
FROM (SELECT DRINKER, COUNT(*)
FROM (SELECT DISTINCT DRINKER, DRINK
FROM ORDERS
WHERE DRINK IN("VODKA","WHISKY"))
GROUP BY DRINKER
HAVING COUNT(*)=2)