I am trying to find the drinker and the drink liked by the drinker but the drinker hasn't ordered the drink so far. I also need to sort the drinker and the drink pairs in the ascending order of drinkers and drinks.
Note: I can only use IN or NOT IN operations. (I am also working in MYSQL)
I am very new to SQL so any advise would be greatly appreciated.
Here are the two tables I am trying to retrieve data from:
CREATE TABLE LIKES( /* Drinkers like drinks */
DRINKER VARCHAR(30) NOT NULL, /* Drinker name */
DRINK VARCHAR(30) NOT NULL, /* Drink name */
RATING DECIMAL(1) NOT NULL, /* Rating of the drink */
CONSTRAINT LIKES_PKEY PRIMARY KEY(DRINKER, DRINK),
CONSTRAINT LIKES_FKEY1 FOREIGN KEY(DRINK) REFERENCES ALLDRINKS(DRINK),
CONSTRAINT LIKES_DKEY2 FOREIGN KEY(DRINKER) REFERENCES DRINKERS(DRINKER));
CREATE TABLE ORDERS( /* Drinkers visit pubs and consumes drinks */
DRINKER VARCHAR(30) NOT NULL, /* Drinker name */
PUB VARCHAR(30) NOT NULL, /* Pub name */
ODATE DATE NOT NULL, /* Order date */
DRINK VARCHAR(30) NOT NULL, /* Drink name */
DRINK_NO DECIMAL(2) NOT NULL, /* A sequence number of a drink */
CONSTRAINT ORDERS_PKEY PRIMARY KEY(DRINKER, PUB, ODATE, DRINK, DRINK_NO),
CONSTRAINT ORDERS_FKEY1 FOREIGN KEY(PUB, DRINK) REFERENCES SERVES(PUB, DRINK),
CONSTRAINT ORDERS_FKEY2 FOREIGN KEY(DRINKER) REFERENCES DRINKERS(DRINKER) );
Here is my SELECT statement:
SELECT DRINKER, DRINK
FROM LIKES
WHERE DRINKER NOT IN
(SELECT DRINKER
FROM ORDERS
WHERE ODATE IS NULL)
AND DRINK NOT IN
(SELECT DRINK
FROM ORDERS
WHERE ODATE IS NULL)
ORDER BY DRINKER AND DRINK ASC;