作者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://webptt.com/cn.aspx?n=bbs/Database/M.1557614502.A.CC0.html
1F:推 neweom: 谢谢你的回覆,不过如果我把()内where的条件全拿掉,得到 05/19 16:15
2F:→ neweom: 的Records数也是29,请问要怎麽解释这29个Records?先看子 05/19 16:19
3F:→ neweom: 查询得到的是Products表内全部的ProductsName,应为77笔 05/19 16:22
4F:→ neweom: 还是说WHERE EXISTS後方都不起作用? 05/19 16:26
5F:→ ken218: 你查询 supplier 表,应该有 29 records 吧。这跟 product 06/06 23:27
6F:→ ken218: s 表有多少 records 无关 06/06 23:27