如何修改此where子句以检查列中的列是否具有nil值?

时间:2015-11-05 22:48:09

标签: sql ruby-on-rails postgresql ruby-on-rails-4 activerecord

我有以下查询:

user.all_memberships.where("user_id = ? OR invited_id = ?", user2.id, user2.id)

这是我membership模型的样子:

#<Membership id: 4, family_tree_id: 3, user_id: 1, created_at: "2015-10-23 20:33:41", updated_at: "2015-10-23 20:33:41", relation: nil, invited_id: nil>

我想要检查的查询是relation != nil ....但不确定如何在传入引号中的where子句的SQL中表示。

换句话说,我希望它能够检查user2.iduser_id列中是否存在invited_id。但是...... relation也必须是零。

我该怎么做?

修改1

根据Blindy的建议,当我进行以下查询时:

user.all_memberships.where("relation is not null and user_id = ? OR invited_id = ?", user2.id, user2.id)

它生成此查询,似乎可以工作但基于它生成的SQL我很担心它。注意该语句的第二个AND和第二部分。感觉它偶尔可能会返回误报。

(0.9ms) SELECT COUNT(*) FROM "memberships" WHERE (memberships.user_id = 1 OR memberships.invited_id = 1) AND (relation is not null and user_id = 2 OR invited_id = 2)

如何自定义AR where查询更符合我想要做的事情而没有任何隐藏的陷阱?

1 个答案:

答案 0 :(得分:1)

这并不完全清楚,但我认为你的意思是:

relation is not null and (user_id = ? OR invited_id = ?)