Re: [SQL ] 新手請教EXISTS語法問題
→
,
沒錯喔,你兩種寫法的差別在於,
上面寫法的子查詢有參考到外部的Suppliers表,
下面寫法的子查詢沒有參考到外部的Suppliers表。
※ 引述《neweom (新哥)》之銘言:
: 在w3schools這題 https://bit.ly/2D7WLmn 範例中
: SELECT SupplierName
: FROM Suppliers
: WHERE EXISTS (SELECT ProductName FROM Products
: WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20);
這裡的子查詢會一一比對外部的Suppliers資料,有點像巢狀迴圈的感覺。
: 會得到 24 個 SupplierName的結果
: 但是如果我改寫成
: SELECT SupplierName
: FROM Suppliers
: WHERE EXISTS (SELECT ProductName FROM Products,suppliers
: WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20);
這裡子查詢完全沒用到外面的Suppliers,所以會先比對出子查詢的結果,才看外查詢。
子查詢只要比對出來有結果,外部查詢就會被全部列出來;
反之子查詢比對出來沒結果,外部查詢就都不會被列出來。
因為你EXISTS內的查詢有資料,因為Suppliers的名稱就全部被印出來,總數剛好29個。
: 會得到 29 個 SupplierName的結果
: 多出來的五筆資料Price都 > 20
: 不知道兩個SQL語法的差別在哪裡,懇請大大指導
https://www.1keydata.com/tw/sql/sql-exists.html
這裡的範例有對你這個情形的說明。
試著回答看看,不知道有沒有解答到。
如果我的想法有誤,還請高手指正^ ^a
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.16.136
※ 文章網址: https://www.ptt.cc/bbs/Database/M.1559442034.A.57D.html
※ 編輯: sagwow (111.250.16.136), 06/02/2019 10:21:14
討論串 (同標題文章)
完整討論串 (本文為第 3 之 3 篇):
Database 近期熱門文章
PTT數位生活區 即時熱門文章