作者ji394su33000 (一枝獨秀不是春)
看板Database
標題Re: [SQL ] 新手請教EXISTS語法問題
時間Sun May 12 06:41:38 2019
※ 引述《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
);
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.194.189.35
※ 文章網址: https://www.ptt.cc/bbs/Database/M.1557614502.A.CC0.html
推 neweom: 謝謝你的回覆,不過如果我把()內where的條件全拿掉,得到 05/19 16:15
→ neweom: 的Records數也是29,請問要怎麼解釋這29個Records?先看子 05/19 16:19
→ neweom: 查詢得到的是Products表內全部的ProductsName,應為77筆 05/19 16:22
→ neweom: 還是說WHERE EXISTS後方都不起作用? 05/19 16:26
→ ken218: 你查詢 supplier 表,應該有 29 records 吧。這跟 product 06/06 23:27
→ ken218: s 表有多少 records 無關 06/06 23:27