我需要从符合以下条件的表中选择步骤列:
工会代码990和sfmta或commn的集合id。我写了以下内容:
select Step
from ..
where Union_Code = 990 AND (SetID = 'SFMTA' or 'COMMN');
上面的查询不返回任何行,解决方案是表达式:
select Step
from ...
where Union_code = 990 and (SetID = 'SFMTA' or SetID = 'COMMN')
我正在使用SQLLite,无法理解or语句的表达式的原因。
2条答案
按热度按时间0h4hbjxa1#
OR
是布尔运算符,要求条件为左操作数和右操作数:在第一个查询中,右操作数不是操作数,而是文本字符串(
'COMMN'
). 发生的情况是,sqlite尝试将字符串作为一个条件进行求值:为此,它将字符串转换为一个数字(这将给出0
,因为字符串不是以数字开头的),然后将数字作为布尔值计算(0
是假的)。简而言之,实际上只检查第一个条件:您需要使用一个条件作为正确的操作数,以使您的代码执行所需的操作—正如您发现的:
注意,用运算符表示更简单
IN
,检查左操作数是否等于右操作数列表中给定的任何值:pgpifvop2#
sql标准的正确方法如下:,