因此,有两个表。一个列出所有有关产品的信息(ID,ProductName,SupplierID,UnitPrice,Package,IsDiscontinued),另一个存储有关供应商的信息(ID,CompanyName,ContactName,City,Country ...) 我需要找到产品价格超过100美元的供应商。因此给出的代码如下:
SELECT CompanyName
FROM Supplier
WHERE EXISTS
( SELECT ProductName
FROM Product
WHERE supplierID = supplier.ID
AND unitprice > 100);
我不明白为什么在子查询中我们需要选择ProductName而不是表Product中的任何其他字段?同样,当系统检测到所有单价> 100且所有供应商ID与另一个表匹配的产品名称时,从何处收集公司名称?
答案 0 :(得分:0)
实际上exists
只关心是否返回行,而不关心该行中的值。因此,选择什么列没有区别。我通常只使用1
:
WHERE EXISTS (SELECT 1
FROM Product
WHERE supplierID = supplier.ID AND unitprice > 100
)
1
易于键入。
答案 1 :(得分:0)
我不明白为什么在子查询中我们不需要选择ProductName 任何其他字段
您可以选择任何其他列,甚至所有列,甚至可以选择select 1...
之类的常量,甚至可以选择null
:select null...
。
使用此子查询的目的是确保至少EXISTS
的行具有其WHERE
子句中提供的属性。
系统检测到所有具有单价的产品名称时> 100,并将SupplierID与其他表匹配,从哪里开始 收集公司的名字是什么?
声明是:
SELECT CompanyName
FROM Supplier
................
因此,当且仅当表Supplier
中带有{{1}的行EXISTS
时,公司名称才从表Product
中收集。 }等于表supplierID
的行的ID
,并附加条件为Suppliers
。