不应该工作但返回所有表内容的 MySQL where 子句

标签 mysql

此查询返回所有表内容。对我来说不是有效的 where 子句。有人知道为什么会这样吗?

SELECT * FROM TableName WHERE 1

最佳答案

在 MySQL 中,TRUE 是一个常数值 = 1,而 FALSE 是 = 0,那么您的查询等同于:

SELECT * FROM TableName WHERE TRUE

此外,所有条件都转换为 0 或 1:

SELECT 'a' = 'a'

将返回 1,而

SELECT 'a' = 'b'

将返回 0,因此例如以下查询都是等价的:

SELECT * FROM TableName WHERE TRUE
SELECT * FROM TableName WHERE 'a' = 'a'
SELECT * FROM TableName WHERE 1

但是每个值 <> 0 也被认为是真的,所以即使这样也会返回所有行:

SELECT * FROM TableName WHERE 2

但是如果一个值 <> 被认为是真的,人们会期望下面的查询起作用:

SELECT * FROM TableName WHERE 2 = TRUE

但这不会返回任何东西,因为 2 = 1。是的,有时 MySQL 有点奇怪。

关于不应该工作但返回所有表内容的 MySQL where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18599542/

相关文章:

MYSQL查询: query displays the second to last line of data

mysql - 错误: Can't connect to MySQL Server (110)

php - 使用 PHP 和 MySQL 的 Android 应用程序 - Dreamweaver 显示 root 错误

MYSQL表日历和右连接

mysql - MySQL中聚合函数 "LAST"的建议解决方案

mysql - mysql 查询的问题

php - PHP 不允许多次登录

mysql - yii 中的 CDbcriteria.?

mysql - 检查插入数据的完整性 - sqlite3

php - 如何用MySQL过滤正确的订单(一个订单包含多行)