問題ID: 8319 NULL値との比較結果がNULL値

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2018-8-10 16:43
hasimohi  常連   投稿数: 14
<解説>
・NOT IN(値のリスト)にNULL値が含まれている場合は、データは1件も返されない
NOT IN(値のリスト)は値のリストと比較した結果が全てFALSEになる場合に条件がTRUEになります。
値のリストにNULL値が含まれている場合は、NULL値との比較結果がNULL値となり、全ての結果がFALSEとならないため、条件はFALSEとなります。条件がFALSEなので、主問合せの結果は0件となります。

→上記の意味がよくわかりません。
具体例を示していただけますか?
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2018-8-11 1:29
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
→上記の意味がよくわかりません。
具体例を示していただけますか?
どなたへの依頼事項かわかりませんが、これでお求めの具体例になっているでしょうか?
# sqlplus pingt/oracle

SQL*Plus: Release 11.2.0.2.0 Production on 土 8月 11 00:43:28 2018

Copyright (c) 1982, 2011, Oracle.  All rights reserved.



Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL> create global temporary table T_8319(
  2  id number,
  3  name char(30)
  4  );

表が作成されました。

SQL> insert into T_8319 values(1,'First');

1行が作成されました。

SQL> insert into T_8319 values(2,'Second');

1行が作成されました。

SQL> insert into T_8319 values(null, 'Null');

1行が作成されました。

SQL> select * from T_8319 where ID not in (1);

	ID NAME
---------- ------------------------------
	 2 Second

SQL> select * from T_8319 where ID not in (1, 2);

レコードが選択されませんでした。

SQL> select * from T_8319 where ID not in(null);

レコードが選択されませんでした。

SQL> select * from T_8319 where ID not in(1, null);

レコードが選択されませんでした。
こちらの公式ドキュメントが参考になるかもしれません。
https://docs.oracle.com/cd/E16338_01/server.112/b56299/conditions013.htm#sthref2022
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2018-8-13 10:15
hasimohi  常連   投稿数: 14
ご回答ありがとうございました。

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.