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

行の存在をテストします。値はチェックしません。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

null指定された product_id を持つ 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 テーブルに注文が存在するすべての製品を返します。

于 2012-05-03T17:18:20.340 に答える
1

Exists サブクエリに行が含まれている場合は TRUE を返します。

あなたがしているのは、ヌルを選択することです。これはnullの行を返すため、条件はtrueになります

于 2012-05-03T17:15:40.507 に答える
1

このexists句は存在をチェックします。つまり、サブクエリがデータを返すかどうかです。データ自体は気にしません。

existsサブクエリが何かを返す場合は true です。

于 2012-05-03T17:14:50.757 に答える
0

の代わりにselect null、id、主キーを選択してみてください。

于 2012-05-03T17:12:31.650 に答える