根据sql server,Null不等同于sql中的任何东西,但是后面的查询会返回已经下订单的所有产品。
Select * from products
where exists (select null from orderdetails
where orderdetails.product_id = products.product_id
答案 0 :(得分:3)
Exists测试是否存在行。它不检查值。您可以使用where exists (select * ...)
或where exists(select 1 ...)
。这没有什么区别。
答案 1 :(得分:2)
Exists
测试以查看包含的语句是否返回任何行。
我们将逐步实现这一目标。
select null from orderdetails
where orderdetails.product_id = products.product_id
为orderdetails表中的每个订单返回一行包含null
的行,并附带给定的product_id。
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表中存在任何订单的每个产品。
答案 2 :(得分:1)
exists
子句检查是否存在:子查询是否返回任何数据。它不担心数据本身。
exists
为真。
答案 3 :(得分:1)
存在如果子查询包含任何行,则返回TRUE。
你正在做的是选择Null;这将返回一行null,因此条件将为真
答案 4 :(得分:0)
尝试选择id,主键,而不是select null
。