1

このクエリはすべての列を 0 として返すと思っていましたが、正しい式 1 はどうですか?

select (not(55))=1, !(55)=1, not(55)=1 ;

+-------------+---------+-----------+
| (not(55))=1 | !(55)=1 | not(55)=1 |
+-------------+---------+-----------+
|           0 |       0 |         1 |
+-------------+---------+-----------+

NOT と ! は同等ではなく、括弧は重要です。

[編集: 元の投稿のクエリを簡略化]

4

3 に答える 3

0

あなたが見ているのは、比較=演算子が演算子よりも優先順位が高いことですNOT

NOT( IFNULL(55,0)) = 1と同等ですNOT (IFNULL(55,0)=1)

(NOT( IFNULL(55,0))) = 1と同等です(NOT IFNULL(55,0)) = 1

!(IFNULL(55,0)) = 1は、見た目とまったく同じです。および は!、 よりも高いまたは同等の優先順位を持つことを示します=

これは、こちらの公式ドキュメントによって裏付けられています。

!andの優先順位の違いNOTは、2 つの演算子のわずかに異なるセマンティクスと予想される使用法に関係していると思います。私は試したことはありませんが、かなり確信x IS !NULLしてx ! IN ([set])おり、許可されていません。

于 2016-08-12T16:23:13.327 に答える