【问题标题】:SQLite check if a row existsSQLite 检查一行是否存在
【发布时间】:2012-11-09 10:17:12
【问题描述】:

我正在尝试检查我的 sqlite 数据库中名为“Products”的表中是否存在特定 ID。

def existsCheck( db, id )
    temp = db.execute( "select exists(
        select 1
        from Products
        where promoID = ?
    ) ", [id] )
end

这是我当前的代码,但它返回一个数组,这意味着我必须先处理转换,然后才能将其用作布尔值。有什么想法可以更改它以使其返回值为 1 的 int 吗?

【问题讨论】:

    标签: ruby sqlite


    【解决方案1】:

    不需要使用子查询:

    def existsCheck( db, id )
        db.execute( "select 1
                     from Products
                     where promoID = ?",
                    [id] ).length > 0
    end
    

    这会返回一个布尔结果。

    【讨论】:

      【解决方案2】:

      改成:

      def existsCheck( db, id )
          temp = db.execute( "select 1 where exists(
              select 1
              from Products
              where promoID = ?
          ) ", [id] ).any?
      end
      

      SQL 查询在满足条件时返回1,否则返回空结果集。整个函数根据结果集返回布尔值。

      【讨论】:

      • 呃,我怎么能在 ruby​​ 中做到这一点?我正在使用'sqlite3'。更新:啊,现在你已经更新了。谢谢! :D
      • @user1043625 已更新。只需使用此查询而不是您的查询。你几乎已经有了解决方案:-)。
      • 它似乎仍然返回一个数组。 if( temp != 1 ) 仍将始终返回 true。
      • @user1043625 我不是 Ruby 程序员,但我认为您应该检查表是否为空。这里描述的方式:Check for array not empty: any? - 看起来不错。空 -> 条件不满足,否则满足。
      • 是的,这行得通,但实际上我试图避免对返回的变量做任何额外的事情。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 2011-01-27
      • 2013-09-26
      • 2015-01-20
      • 1970-01-01
      相关资源
      最近更新 更多