根据 sql server,Null 不等同于 sql 中的任何东西,但以下查询返回已下订单的所有产品。
Select * from products
where exists (select null from orderdetails
where orderdetails.product_id = products.product_id
根据 sql server,Null 不等同于 sql 中的任何东西,但以下查询返回已下订单的所有产品。
Select * from products
where exists (select null from orderdetails
where orderdetails.product_id = products.product_id
Exists测试是否存在行。它不检查值。您可以使用where exists (select * ...)
或where exists(select 1 ...)
。这不会有什么不同。
Exists
测试以查看包含的语句是否返回任何行。
我们将一步一步地遵循这一点。
select null from orderdetails
where orderdetails.product_id = products.product_id
使用给定的 product_id返回包含null
orderdetails 表中每个订单的行。
exists (select null from orderdetails
where orderdetails.product_id = products.product_id)
如果子查询返回任何行,则返回 true(如果表中有带有该 product_id 的订单,我们将有包含 的行null
)
Select * from products
where exists (select null from orderdetails
where orderdetails.product_id = products.product_id)
返回 orderdetail 表中存在任何订单的每个产品。
该exists
子句检查是否存在:子查询是否返回任何数据。它不担心数据本身。
exists
如果子查询返回任何内容,则为真。
Exists 如果子查询包含任何行,则返回 TRUE。
你正在做的是选择空;这将返回一行空值,因此条件为真
尝试,而不是select null
,选择 id,主键。