今天在學利用子查詢進行過濾時,照著書中用in的方式改用exists,結果不一樣
--使用in查找訂購物品(prod_id)為RGAN01的顧客資訊
SELECT CUST_NAME, CUST_CONTACT
FROM CUSTOMERS
WHERE CUST_ID IN
(SELECT CUST_ID
FROM ORDERS
WHERE ORDER_NUM IN
(SELECT ORDER_NUM FROM ORDERITEMS WHERE PROD_ID = 'RGAN01'));
以下為查詢結果:

-使用exists查找訂購物品為RGAN01d的顧客資訊
SELECT CUST_NAME, CUST_CONTACT
FROM CUSTOMERS
WHERE EXISTS
(SELECT CUST_ID
FROM ORDERS
WHERE EXISTS
(SELECT ORDER_NUM FROM ORDERITEMS WHERE PROD_ID = 'RGAN01'));
以下為查詢結果:

請教為何兩次結果不同?使用in和exists的差別是啥?
uj5u.com熱心網友回復:
加上ORDERS表和ORDERITEMS表欄位相等的條件uj5u.com熱心網友回復:
SELECT CUST_NAME, CUST_CONTACTFROM CUSTOMERS a
WHERE EXISTS
(SELECT *
FROM ORDERS b
WHERE a.CUST_ID=c.CUST_ID and EXISTS
(SELECT * FROM ORDERITEMS c WHERE PROD_ID = 'RGAN01' and b.ORDER_NUM=c.ORDER_NUM )
);
這樣執行一下,結果應該是一樣的
uj5u.com熱心網友回復:
嗯,謝謝,忘加條件了,還有順便說下,你寫的第一個where子句里的條件應該是a.CUST_ID=b.CUST_IDuj5u.com熱心網友回復:
你首先要知道in和exists有什么區別,一個in是可以回傳值,而exists卻只是告訴你它在不在而已轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/83858.html
標籤:基礎和管理
