在尝试回答 this question 时, 我发现了一个我认为是错误的语法
select * from table where area and block
我尝试了一个 sqlFiddle,发现它是有效的。
但我一直无法找到它是如何工作的(我找到的所有文档都包括运算符)...
在 sql fiddle 上做了一些尝试 here
它似乎“消除”了可空 int 字段的 null 和 0 结果,或非可空 int 字段的 0 结果。
它看起来也保留了 varchar 值...其中包含 int 值(但不是“0”)!
即使我认为使用这种语法(根本)不是一个好主意,如果有人对如何管理它有任何解释,我将不胜感激......
最佳答案
来自 MySQL documentation for Logical Operators :
MySQL evaluates any nonzero, non-NULL value to TRUE. For example, the following statements all assess to TRUE:
mysql> SELECT 10 IS TRUE;<br/>
-> 1
mysql> SELECT -10 IS TRUE;<br/>
-> 1
mysql> SELECT 'string' IS NOT NULL;<br/>
-> 1
它似乎将任何非零 int
字段评估为 TRUE
。此外,任何包含数字的 varchar
字段都被视为数字字段。我检查了你的 fiddle ,'0'
的 varchar
字段不评估为TRUE
。任何无法转换为数字的 varchar
字段都不会计算为 TRUE
,除非它是 IS NOT NULL
表达式的一部分。因此:
mysql> SELECT 'string' IS TRUE;<br/>
-> 0
通过测试您的 fiddle ,我发现以下 2 个查询的行为相同:
select * from test where ttt;
select * from test where ttt IS TRUE;
我没有任何明确的证据或源代码,但看起来 MySQL 实际上 在上面的第一个查询中使用了一个运算符,即使它被省略了也是如此。
关于mysql - 没有运算符的 Where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30885669/