1. ホーム
  2. mysql

[解決済み] MySQLの<=>という演算子は何ですか?

2022-04-20 07:57:53

質問

以前の開発者が書いたコードで作業しているのですが、あるクエリでこう書かれています。

WHERE p.name <=> NULL

とは何ですか? <=> このクエリの意味は?と同じ意味なのでしょうか? = ? それとも構文エラーですか?

しかし、エラーや例外は表示されません。私はすでに <> = != MySQL .

解決方法は?

TL;DR

それは NULL セーフイコール 演算子を使用します。

通常の = 演算子では、2 つの値が比較され、その結果は次のいずれかです。 0 (等しくない) または 1 (イコール)、言い換えれば 'a' <=> 'b' 収穫 0'a' <=> 'a' 収量 1 .

とは異なり、通常の = 演算子の値は NULL は特別な意味を持たないので、決して NULL を可能な結果であるとしている;だから 'a' <=> NULL 収穫 0NULL <=> NULL 収量 1 .

お役立ち情報

これは、オペランドが両方とも NULL で、2つの列の間で一貫した比較結果が必要な場合。

もう一つの使用例は、プリペアド・ステートメントなどでの使用です。

... WHERE col_a <=> ? ...

ここで、プレースホルダにはスカラー値か NULL クエリについて何も変更する必要はありません。

関連演算子

その他 <=> との比較に使用できる演算子は、他に2つあります。 NULL すなわち IS NULLIS NOT NULL これらはANSI標準の一部であり、他のデータベースでもサポートされています。 <=> は、MySQL 固有のものです。

これらは、MySQL の <=> :

'a' IS NULL     ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)

これを元に、あなたの特定のクエリ(フラグメント)を、よりポータブルなものに変換することができます。

WHERE p.name IS NULL

サポート

SQL:2003 標準では、このための述語が導入され、これは MySQL の <=> 演算子で、次のような形式です。

IS [NOT] DISTINCT FROM 

以下は普遍的に支持されているが、相対的に複雑である。

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 1
     ELSE 0
END = 1