sqlite或运算符

xpcnnkqh  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(285)

我需要从符合以下条件的表中选择步骤列:
工会代码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语句的表达式的原因。

0h4hbjxa

0h4hbjxa1#

OR 是布尔运算符,要求条件为左操作数和右操作数:

< condition 1 > OR < condition 2>

在第一个查询中,右操作数不是操作数,而是文本字符串( 'COMMN' ). 发生的情况是,sqlite尝试将字符串作为一个条件进行求值:为此,它将字符串转换为一个数字(这将给出 0 ,因为字符串不是以数字开头的),然后将数字作为布尔值计算( 0 是假的)。简而言之,实际上只检查第一个条件:

SetID = 'SFMTA' or 'COMMN'
==>     SetID = 'SFMTA' or 0
==>     SetID = 'SFMTA'

您需要使用一个条件作为正确的操作数,以使您的代码执行所需的操作—正如您发现的:

SetID = 'SFMTA' or SetID = 'COMMN'

注意,用运算符表示更简单 IN ,检查左操作数是否等于右操作数列表中给定的任何值:

SetID in ('SFMTA', 'COMMN')
pgpifvop

pgpifvop2#

sql标准的正确方法如下:,

select Step  
from ...  
where Union_code = 990 and SetID in ('SFMTA', 'COMMN');
``` `OR` 子句只应在使用满足任一情况的不同列集进行筛选时使用

相关问题