通过连接表属性从查询结果中删除一些检索到的记录

时间:2015-02-26 22:47:38

标签: sql ruby-on-rails postgresql

我有类似的查询:

SomeModel.includes(:some_join_table).where(name: name, some_join_table: {*** STUFF ***})
some_join_table中的

有一个来自SomeModel的相关id的字段和一个不允许的布尔列。如何让该查询返回name == name的每条记录,而不包括id == id和disallowed == true的记录?

2 个答案:

答案 0 :(得分:0)

  

不包括id == id和disallowed == true

的记录

您可以将此条件转换为:x.id <> y.iddisallowed = false

不确定Ruby语法,但此查询会按照您的要求执行(只要定义disallowed NOT NULL - 我假设id是PK(不能是空):

SELECT m.*
FROM   SomeModel m
JOIN   some_join_table j USING (name)
WHERE  m.id <> j.id OR NOT j.disallowed;

答案 1 :(得分:0)

只需添加更多where子句

SomeModel.includes(:join_table).where(:name => name).
  where.not(:join_table => {:id => 10})

例如

Post.includes(:comments).where(:subject => "Hello").
  where.not(:comments => {:id => 10})