rails 查询 hstore where key IS NOT something or does not exist
rails query hstore where key IS NOT something or does not exist
我有一个带 hstore 的 table,有时我用它来存储复选框的信息。
我们使用“1”表示选中,“0”表示未选中。 hstore 没有默认值,因此用户可以处于 4 种状态之一:
customer_a = Customer.new({properties: {checkbox: "1"}}) # checked
customer_b = Customer.new({properties: nil}) # unchecked(object doesn't exist)
customer_c = Customer.new({properties: {checkbox: "0"}}) # unchecked(unchecked)
customer_d = Customer.new({properties: {taco: "chicken"}}) # unchecked(key doesn't exist)
情况: 我怎样才能找到所有 'unchecked' 行?
Customer.where(" customer.properties -> 'checkbox' NOT LIKE '1' ")
^^^ 不起作用^^^ 忽略 'checkbox' 键为空且属性为空的客户
Customer.where("customers.properties -> 'checkbox' LIKE '%0%' OR customers.properties IS NULL")
^^^不起作用^^^也忽略掉钥匙的地方
有没有更好的方法在单个查询中执行此操作?
查询应该return[customer_b, customer_c, customer_d]
当前解决方案:
- 检查:Customer.where(" customer.properties -> 'checkbox' LIKE '1' ")
- 未选中:Customer.all - Customer.where(" customer.properties -> 'checkbox' LIKE '1' ")
是否有 sql 查询 return 不存在 hstore 键的行?
如果要查找 hstore 为空的所有记录,请使用
Customer.where(properties: ['',nil])
或
Customer.where("properties='' OR properties IS NULL")
编辑
假设您想从关于空字符串的评论中找到所有没有 1 的内容,您可以试试这个吗,
Customer.where("properties -> 'checkbox' NOT LIKE '1' OR NOT(properties ? 'checkbox') OR properties = '' OR properties is null")
检查 hstore 是否包含一个键
properties ? 'checkbox'
检查包含,我正在做一个 not 来查找没有复选框的内容,然后是空属性。让我知道它是否有效。
这将 return 复选框键为 null 或不为“1”的所有记录,即已选中
customer = customer.where("properties->'checkbox' != ? OR properties->'checkbox' IS NULL", "1")
我有一个带 hstore 的 table,有时我用它来存储复选框的信息。 我们使用“1”表示选中,“0”表示未选中。 hstore 没有默认值,因此用户可以处于 4 种状态之一:
customer_a = Customer.new({properties: {checkbox: "1"}}) # checked
customer_b = Customer.new({properties: nil}) # unchecked(object doesn't exist)
customer_c = Customer.new({properties: {checkbox: "0"}}) # unchecked(unchecked)
customer_d = Customer.new({properties: {taco: "chicken"}}) # unchecked(key doesn't exist)
情况: 我怎样才能找到所有 'unchecked' 行?
Customer.where(" customer.properties -> 'checkbox' NOT LIKE '1' ")
^^^ 不起作用^^^ 忽略 'checkbox' 键为空且属性为空的客户
Customer.where("customers.properties -> 'checkbox' LIKE '%0%' OR customers.properties IS NULL")
^^^不起作用^^^也忽略掉钥匙的地方
有没有更好的方法在单个查询中执行此操作?
查询应该return[customer_b, customer_c, customer_d]
当前解决方案:
- 检查:Customer.where(" customer.properties -> 'checkbox' LIKE '1' ")
- 未选中:Customer.all - Customer.where(" customer.properties -> 'checkbox' LIKE '1' ")
是否有 sql 查询 return 不存在 hstore 键的行?
如果要查找 hstore 为空的所有记录,请使用
Customer.where(properties: ['',nil])
或
Customer.where("properties='' OR properties IS NULL")
编辑
假设您想从关于空字符串的评论中找到所有没有 1 的内容,您可以试试这个吗,
Customer.where("properties -> 'checkbox' NOT LIKE '1' OR NOT(properties ? 'checkbox') OR properties = '' OR properties is null")
检查 hstore 是否包含一个键
properties ? 'checkbox'
检查包含,我正在做一个 not 来查找没有复选框的内容,然后是空属性。让我知道它是否有效。
这将 return 复选框键为 null 或不为“1”的所有记录,即已选中
customer = customer.where("properties->'checkbox' != ? OR properties->'checkbox' IS NULL", "1")