如何在SQL子查询中使用WHERE EXISTS?

问题描述 投票:0回答:1

我需要找到在VICTORIA AVE上的一家酒馆订购饮品的独特饮酒者。在2020年3月。

以下是我要从中检索数据的表:

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)   );

CREATE TABLE LOCATED(   /* Pubs have locations */
PUB         VARCHAR(30) NOT NULL,   /* Pub name */
STREET      VARCHAR(30) NOT NULL,   /* Street name  */
BLDG_NO     DECIMAL(4)  NOT NULL,   /* Building number  */
    CONSTRAINT LOCATED_PKEY PRIMARY KEY(PUB) );

到目前为止是我的SELECT语句:

SELECT DISTINCT DRINKER 
FROM ORDERS 
WHERE EXISTS (SELECT PUB 
              FROM LOCATED
              WHERE STREET = 'VICTORIA AVE.' 
              AND ORDERS.ODATE >= STR_TO_DATE('01-MAR-2020','%d-%M-%Y')
              AND ORDERS.ODATE <= STR_TO_DATE('01-MAR-2020','%d-%M-%Y'));
mysql sql exists
1个回答
0
投票

这不适用于EXISTS。您需要与ORDERS中的酒吧匹配的酒吧,因此您应该使用JOININ

SELECT DISTINCT o.drinker
FROM orders AS o
JOIN located AS l ON o.pub = l.pub
WHERE l.STREET = 'VICTORIA AVE.' 
AND o.ODATE BETWEEN STR_TO_DATE('01-MAR-2020','%d-%M-%Y') AND STR_TO_DATE('01-MAR-2020','%d-%M-%Y'));
© www.soinside.com 2019 - 2024. All rights reserved.