作者sagwow (不是我)
看板Database
标题Re: [SQL ] 新手请教EXISTS语法问题
时间Sun Jun 2 10:20:30 2019
1F:→ neweom: 还是说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://webptt.com/cn.aspx?n=bbs/Database/M.1559442034.A.57D.html
※ 编辑: sagwow (111.250.16.136), 06/02/2019 10:21:14