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
行の存在をテストします。値はチェックしません。where exists (select * ...)
またはを使用できますwhere exists(select 1 ...)
。違いはありません。
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 テーブルに注文が存在するすべての製品を返します。
Exists サブクエリに行が含まれている場合は TRUE を返します。
あなたがしているのは、ヌルを選択することです。これはnullの行を返すため、条件はtrueになります
このexists
句は存在をチェックします。つまり、サブクエリがデータを返すかどうかです。データ自体は気にしません。
exists
サブクエリが何かを返す場合は true です。
の代わりにselect null
、id、主キーを選択してみてください。