mysql where condition只引用一列,这是什么意思?

8gsdolmq  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(497)

示例:

SELECT *
FROM table t
WHERE t.col1

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

根据列的性质,这些查询的行为不同。在我的测试中,如果列的类型是integer,则不会为该列显示带有0或null的行,如果它是string,则查询不会给出任何结果。
我想了解这些条件意味着什么。在mysql手册中找不到任何规范,也没有在线解释。
谢谢。

bvjveswy

bvjveswy1#

在查询中,您没有在where子句中指定有效的比较(例如: where t.col1 = 10 ) .. 因此,where condition尝试对boolen列中的值求值
在这种情况下,不同的结果只是基于每种类型的布尔型中的不同强制转换
如果开始基于整数的查询,则始终返回一个有效的true结果,以便根据每个字符串值获取其他字符串中的所有行,这可能不会生成任何行、部分行或所有行。。试着用boolean格式查看列的强制转换结果

SELECT if(t.col1, true, false)
    FROM table t
    WHERE t.col1

以及

SELECT if( t.col1 AND t.col2, true,false)
    FROM table t
    WHERE t.col1 AND t.col2
7fhtutme

7fhtutme2#

那些不是真正的布尔表达式。布尔表达式的计算结果为true或false,其形式为 where t.col1 = 0 and t.col2 >= 3 例如。
语句有时返回数据,有时不返回数据,这是因为0和1分别代表false和true。
正如您已经观察到的,0和null不返回行,因为它们在0的情况下被视为false,在null的情况下不可比较。另一方面,字符串被隐式转换为数字。如果字符串以0以外的数字开头,则在mysql中该字符串将转换为该数字。如果字符串以除此之外的任何内容开头,它将转换为0。这就是为什么不能得到字符串的结果。
我建议不要使用这些“简写布尔表达式”。一定要写正确的表达方式!

相关问题