- - PR -
val != 1 という条件をつけたSQL文について
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-12-20 18:09
Windows 2000 + MySQL4.0.18でアプリケーションを作成しています。
SQL文で質問させてください。 以下のようなテーブルがあります。 create table test( id integer, val1 integer); insert into test values (1, 1); insert into test values (2, 2); insert into test values (3, null); で、次のようなSQL文を実行しました。 select * from test where val1 != 1; この場合、得られるデータは、 id val1 2 2 3 null だと思っていたのですが、実際に得られたデータは、 id val1 2 2 でした。これはSQLの仕様なのでしょうか?それともMySQLに 特化したものなのでしょうか? | ||||
|
投稿日時: 2004-12-20 18:32
SQL の仕様です。null に対する演算が真になることはありません。null = null という比較でさえも True を返すことはないのです。null とは "1である" というわけでもく、"1でない" というわけでもなく、ただただヌル(未定義)なのです。ただし、一部のデータベースではオプションで null の振る舞いをビミョーに変えられるものがあります。 ちなみに、!= 演算子が使えるデータベースも多いですが、これは標準SQLではありません。通常は <> を使用します。 | ||||
|
投稿日時: 2004-12-20 18:45
未記入さん、ありがとうございます。
なるほど、仕様ですか。ただただヌル(未定義)なのですね。 となると強引に、 select * from test where val1 != 1 or val1 is null; こんな風にしないといけないですね。 !=をあたりまえのように使ってましたが、標準では<>なのです ね。非常に勉強になりました。ありがとうございました。 | ||||
1
