Re: [SQL ] 新手请教EXISTS语法问题

楼主: ji394su33000 (一枝独秀不是春)   2019-05-12 06:41:38
※ 引述《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
);
作者: neweom (新哥)   2019-05-19 16:15:00
谢谢你的回复,不过如果我把()内where的条件全拿掉,得到的Records数也是29,请问要怎么解释这29个Records?先看子查询得到的是Products表内全部的ProductsName,应为77笔还是说WHERE EXISTS后方都不起作用?
作者: ken218 (ken218)   2019-06-06 23:27:00
你查询 supplier 表,应该有 29 records 吧。这跟 products 表有多少 records 无关

Links booklink

Contact Us: admin [ a t ] ucptt.com