我刚刚开始学习MYSQL,虽然我对连接非常好,但我对子查询有很多问题。所以我决定多练习一下。 我想找到过去订单的顾客和他们的身份证。该商品的价格必须为6.5美元或更高。使用连接这就是我的方法:
SELECT
CUSTOMER_TBL.CUST_ID
, CUST_NAME
FROM
CUSTOMER_TBL
INNER JOIN ORDERS_TBL
ON ORDERS_TBL.CUST_ID = CUSTOMER_TBL.CUST_ID
INNER JOIN PRODUCTS_TBL
ON ORDERS_TBL.PROD_ID = PRODUCTS_TBL.PROD_ID
WHERE PRODUCTS_TBL.COST > 6.5
以下是我使用子查询的方法。
SELECT CUSTOMER_TBL.CUST_ID
, CUST_NAME
FROM CUSTOMER_TBL
WHERE
EXISTS (
SELECT *
FROM ORDERS_TBL
WHERE ORDERS_TBL.CUST_ID = CUSTOMER_TBL.CUST_ID
)
正如你所看到的那样,我只接受了那些已下订单的人。但我无法弄清楚剩下的;订单,只有那些高于6.5美元的订单
答案 0 :(得分:2)
SELECT CUST_ID, CUST_NAME FROM CUSTOMER_TABLE
WHERE CUST_ID IN
(SELECT CUST_ID FROM ORDERS_TBL
WHERE PROD_ID IN
(SELECT PROD_ID FROM PRODUCTS_TBL
WHERE COST > 6.5))
这可能会对你有帮助。
答案 1 :(得分:1)
这样的事情可能是:
SELECT
CUSTOMER_TBL.CUST_ID,
CUST_NAME
FROM
CUSTOMER_TBL
WHERE EXISTS
(
SELECT
*
FROM
ORDERS_TBL
INNER JOIN PRODUCTS_TBL
ON ORDERS_TBL.PROD_ID = PRODUCTS_TBL.PROD_ID
WHERE
ORDERS_TBL.CUST_ID = CUSTOMER_TBL.CUST_ID
AND PRODUCTS_TBL.COST > 6.5
)