【发布时间】:2020-05-16 03:26:53
【问题描述】:
我正在尝试查找饮酒者和饮酒者喜欢的饮品,但饮酒者到目前为止还没有订购该饮品。我还需要按饮酒者和饮料的升序对饮酒者和饮料对进行排序。
注意:我只能使用 IN 或 NOT IN 操作。 (我也在 MYSQL 工作)
我对 SQL 非常陌生,因此非常感谢任何建议。
这是我试图从中检索数据的两个表:
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) );
这是我的 SELECT 语句:
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;
【问题讨论】:
标签: mysql sql where-clause notin