如果我有一个带有where子句的SQL查询,当`where`上没有运算符时会发生什么?

时间:2011-08-14 07:22:32

标签: sql sqlite

例如,如果我有以下查询:

select * from msgs as e left outer join msgs as m on e.id = m.id where m.property

查询的where部分究竟发生了什么?

1 个答案:

答案 0 :(得分:2)

如果m.property的值在解释为布尔表达式时求值为true,则该行将被选中。

请参阅http://www.sqlite.org/lang_select.html#whereclause

它说

  • 如果指定了WHERE子句,则将WHERE表达式作为布尔表达式计算输入数据中的每一行。在继续之前,WHERE子句表达式求值为false的所有行都将从数据集中排除。

对于布尔表达式,它表示

  • 要将SQL表达式的结果转换为布尔值,SQLite首先将结果以与CAST表达式相同的方式将结果转换为NUMERIC值。 NULL或零值(整数值0或实数值0.0)被认为是假的。所有其他值都被认为是真实的。例如,值NULL,0.0,0,'english'和'0'都被认为是false。值1,1.0,0.1,-0.1和'1english'被认为是真实的。

因此它应该评估m.property并将其转换为布尔值,并保留它为真的行。