我试图让所有不是列的行都不是特定值。
Task.where('owner_user_id != ?', 429)
但是,这不会返回owner_user_id为nil的行。我想尝试是不同的,但我得到以下错误。
Task.where('owner_user_id is distinct from (429)')
Task Load (2.3ms) SELECT "tasks".* FROM "tasks" WHERE (owner_user_id is distinct from (429)) LIMIT 10 OFFSET 0
SQLite3::SQLException: near "distinct": syntax error: SELECT "tasks".* FROM "tasks" WHERE (owner_user_id is distinct from (429)) LIMIT 10 OFFSET 0
#<Task::ActiveRecord_Relation:0x007f07940ea338>
如何获取列不是特定值的所有行(包括所有包含nil的行)?
答案 0 :(得分:1)
这将触发2个查询,但这将返回所需的结果
Task.where.not(id: Task.where(owner_user_id: 429).pluck(:id))
答案 1 :(得分:1)
这会触发一个查询,并为您提供包含nil
值的结果:
Task.where('owner_user_id != ? OR owner_user_id IS NULL', 429)
希望它有所帮助!
答案 2 :(得分:0)
!=
是红宝石的说法&#34;不等于&#34;但是在postgres / sql中,你需要<>
,所以
Task.where('owner_user_id <> ?', 429)
或在arel中你也可以这样做:
Task.where.not(:owner_user_id => 429)