Where where子句过滤“ANY” - 这意味着什么?

时间:2015-05-14 13:49:39

标签: ruby-on-rails ruby postgresql

我试图理解为什么我没有在使用postgresql的rails应用程序上的ruby上收到任何记录。这是正在执行的SQL查询:

SELECT g.program_id, g.title, 
    COALESCE(COUNT(pr), 0) AS ac, g.default 
FROM groups AS g 
  LEFT OUTER JOIN memberships AS m ON m.group_id = g.id 
  LEFT OUTER JOIN progresses AS pr ON m.id = pr.participant_id 
                                  AND (pr.status = 'completed') 
WHERE g.program_id = ANY(@1)
GROUP BY g.id 
ORDER BY g.program_id, g.position, g.id

我的问题是:ANY(@1)意味着什么?

请耐心等待,因为我是ruby / rails / postgresql新手。

谢谢!

更新:添加了一些附加代码。请不要认同下面的查询,因为它已在上面提出。

class StatsComponents::CompletedActivitiesPerGroupStats
  include StatsComponent::Interface

  GROUP_ACTIVITIES = <<-SQL
  g.program_id, g.title, COALESCE(COUNT(pr), 0) AS ac, g.default
  FROM groups AS g
  LEFT OUTER JOIN memberships AS m ON m.group_id = g.id
  LEFT OUTER JOIN progresses AS pr ON m.id = pr.participant_id
  AND (pr.status = 'completed')
  WHERE g.program_id = ANY(@1)
  GROUP BY g.id
  ORDER BY g.program_id, g.position, g.id
  SQL

  def generate
  ...

1 个答案:

答案 0 :(得分:1)

它选择g.program_id@1请求返回的数组中存在值的记录,它们在程序中的某个位置设置为查询参数(例如SELECT...)。

您可以在此处使用SOME(@1)

严格地说,这不是一个SQL查询。虽然没有sql.execute或类似内容,但它只是一个多行字符串分配。