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

看板Database (資料庫)作者 (不是我)時間5年前 (2019/06/02 10:20), 5年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)

還是說WHERE 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
文章代碼(AID): #1Syp9oLz (Database)
文章代碼(AID): #1Syp9oLz (Database)