示例:
SELECT *
FROM table t
WHERE t.col1
SELECT *
FROM table t
WHERE t.col1 AND t.col2
根据列的性质,这些查询的行为不同。在我的测试中,如果列的类型是integer,则不会为该列显示带有0或null的行,如果它是string,则查询不会给出任何结果。
我想了解这些条件意味着什么。在mysql手册中找不到任何规范,也没有在线解释。
谢谢。
示例:
SELECT *
FROM table t
WHERE t.col1
SELECT *
FROM table t
WHERE t.col1 AND t.col2
根据列的性质,这些查询的行为不同。在我的测试中,如果列的类型是integer,则不会为该列显示带有0或null的行,如果它是string,则查询不会给出任何结果。
我想了解这些条件意味着什么。在mysql手册中找不到任何规范,也没有在线解释。
谢谢。
2条答案
按热度按时间bvjveswy1#
在查询中,您没有在where子句中指定有效的比较(例如:
where t.col1 = 10
) .. 因此,where condition尝试对boolen列中的值求值在这种情况下,不同的结果只是基于每种类型的布尔型中的不同强制转换
如果开始基于整数的查询,则始终返回一个有效的true结果,以便根据每个字符串值获取其他字符串中的所有行,这可能不会生成任何行、部分行或所有行。。试着用boolean格式查看列的强制转换结果
以及
7fhtutme2#
那些不是真正的布尔表达式。布尔表达式的计算结果为true或false,其形式为
where t.col1 = 0 and t.col2 >= 3
例如。语句有时返回数据,有时不返回数据,这是因为0和1分别代表false和true。
正如您已经观察到的,0和null不返回行,因为它们在0的情况下被视为false,在null的情况下不可比较。另一方面,字符串被隐式转换为数字。如果字符串以0以外的数字开头,则在mysql中该字符串将转换为该数字。如果字符串以除此之外的任何内容开头,它将转换为0。这就是为什么不能得到字符串的结果。
我建议不要使用这些“简写布尔表达式”。一定要写正确的表达方式!