0

根据 sql server,Null 不等同于 sql 中的任何东西,但以下查询返回已下订单的所有产品。

Select * from products 
where exists (select null from orderdetails 
where orderdetails.product_id = products.product_id
4

5 回答 5

3

Exists测试是否存在行。它不检查值。您可以使用where exists (select * ...)where exists(select 1 ...)。这不会有什么不同。

于 2012-05-03T17:12:48.227 回答
2

Exists测试以查看包含的语句是否返回任何行。

我们将一步一步地遵循这一点。


select null from orderdetails 
where orderdetails.product_id = products.product_id

使用给定的 product_id返回包含nullorderdetails 表中每个订单的行。


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 表中存在任何订单的每个产品。

于 2012-05-03T17:18:20.340 回答
1

exists子句检查是否存在:子查询是否返回任何数据。它不担心数据本身。

exists如果子查询返回任何内容,则为真。

于 2012-05-03T17:14:50.757 回答
1

Exists 如果子查询包含任何行,则返回 TRUE。

你正在做的是选择空;这将返回一行空值,因此条件为真

于 2012-05-03T17:15:40.507 回答
0

尝试,而不是select null,选择 id,主键。

于 2012-05-03T17:12:31.650 回答