首页 > 解决方案 > MySQL where 条件只引用了一个列,是什么意思?

问题描述

例子:

SELECT *
FROM table t
WHERE t.col1

SELECT *
FROM table t
WHERE t.col1 AND t.col2

根据列的性质,这些查询的行为会有所不同。在我的测试中,如果该列是整数类型,则该列不会显示带有 0 或空值的行,如果它是字符串,则查询将不会给出任何结果。

我想了解这些类型的 where 条件意味着什么。在 MySQL 手册中找不到任何规范,也没有在线解释。

谢谢。

标签: mysqlconditional-statementswhere

解决方案


这些只是不是正确的布尔表达式。布尔表达式的计算结果为真或假,例如,其形式where t.col1 = 0 and t.col2 >= 3为。

您的语句有时会返回数据而有时不会返回数据的事实是因为 0 和 1 分别代表 false 和 true。

就像您已经观察到的那样,0 和 NULL 不会返回行,因为它们在 0 的情况下被视为假,而在 NULL 的情况下则不可比较。另一方面,字符串被隐式转换为数字。如果字符串以 0 以外的数字开头,则字符串将在 MySQL 中转换为该数字。如果字符串以除此之外的任何内容开头,则将其转换为 0。这就是您没有得到字符串结果的原因。

我建议不要使用这些“简写布尔表达式”。总是写正确的表达方式!


推荐阅读