mysql - 没有运算符的 Where 子句

标签 mysql

在尝试回答 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/

相关文章:

php - 如何在下拉列表中列出数据库的所有表(不是记录)MySQL PHP

MySQL 查询 - 加入麻烦......又来了?

mysql - 从不同的数据库导入 Magento 中的产品

php - 每年将生日事件添加到 jQuery 完整日历中

mysql - 需要帮助让 MySQL 存储过程与 CASE 语句一起工作

php - Laravel 4 高级在哪里 - 未知专栏

php - Laravel 路线不工作。没有拿到id

mysql - MySQL 数据库中的大量列

mysql - 如何在包含来自 SQL 中另一个单元格的字符串的单元格子字符串中搜索字符串

php - MySQL 查询输出的决策