Re: [SQL ] 新手請教EXISTS語法問題

作者: ji394su33000 (一枝獨秀不是春)   2019-05-12 06:41:38
※ 引述《neweom (新哥)》之銘言:
: 在w3schools這題 https://bit.ly/2D7WLmn 範例中
: SELECT SupplierName
: FROM Suppliers
: WHERE EXISTS (SELECT ProductName FROM Products
: WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20);
: 會得到 24 個 SupplierName的結果
: 但是如果我改寫成
: SELECT SupplierName
: FROM Suppliers
: WHERE EXISTS (SELECT ProductName FROM Products,suppliers
: WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20);
: 會得到 29 個 SupplierName的結果
: 多出來的五筆資料Price都 > 20
: 不知道兩個SQL語法的差別在哪裡,懇請大大指導
下面這一條少了一個內外的KEY join,因為第二個的EXISTS中出現了Supplier Table
所以是括號中的先跑,外面的就沒吃到了。
沒串到key會怎樣?
像第一條的寫法如果像這樣
SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products
WHERE 1=1
//1=1 沒什麼意義
AND Price < 20);
Number of Records: 29
條件也是不起作用
第二條想要加Supplier 應該是像這樣
SELECT SupplierName
FROM Suppliers s1
WHERE EXISTS (SELECT ProductName
FROM Products,suppliers s2
WHERE Products.SupplierID = s2.supplierID
AND s1.SupplierID = s2.supplierID
AND Price < 20
);
作者: neweom (新哥)   2019-05-19 16:15:00
謝謝你的回覆,不過如果我把()內where的條件全拿掉,得到的Records數也是29,請問要怎麼解釋這29個Records?先看子查詢得到的是Products表內全部的ProductsName,應為77筆還是說WHERE EXISTS後方都不起作用?
作者: ken218 (ken218)   2019-06-06 23:27:00
你查詢 supplier 表,應該有 29 records 吧。這跟 products 表有多少 records 無關

Links booklink

Contact Us: admin [ a t ] ucptt.com