【问题标题】:SQLite OR operatorSQLite OR 运算符
【发布时间】:2020-10-04 14:31:50
【问题描述】:

我需要从符合以下条件的表中选择步骤列:
联合代码 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')

我正在使用 SQL Lite,但无法理解 OR 语句的表达式。

【问题讨论】:

    标签: sql sqlite select where-clause


    【解决方案1】:

    Sql标准的正确方法如下,

    select Step  
    from ...  
    where Union_code = 990 and SetID in ('SFMTA', 'COMMN');
    

    OR 子句只能在过滤满足任一情况的不同列集时使用

    【讨论】:

      【解决方案2】:

      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')
      

      【讨论】:

        猜你喜欢
        • 2015-07-08
        • 2016-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-23
        相关资源
        最近更新 更多