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

1

在您的第一列中,代码就像(mysql 对代码执行隐式评估 (55)=0 )

select  (55)=1 from dual;  /* result 0  false*/ 

然后

select  not (55)=1 from dual; /* resul  1 true alias not false */
于 2016-08-12T15:56:07.383 回答
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完全等同于看起来的样子;和 表示!具有更高或等于 的优先级=

此处的官方文档证实了这一点。

我猜想不同的优先级!NOT这两个运算符的语义和预期用途略有不同。我从未尝试过,但我很确定x IS !NULL并且x ! IN ([set])不被允许。

于 2016-08-12T16:23:13.327 回答
0

格雷格:

根据IFNULL(expr1,expr2)的MYSQL文档:

如果 expr1 不为 NULL,则 IFNULL() 返回 expr1;否则返回 expr2。IFNULL() 返回一个数字或字符串值,具体取决于使用它的上下文。

参考:http ://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_ifnull

于 2016-08-12T15:59:12.533 回答