2015-05-14 68 views
2

我想了解爲什麼我在使用postgresql的Rails應用程序上的ruby上沒有收到任何記錄。這是正在執行的SQL查詢:Where子句按「ANY」過濾 - 這是什麼意思?

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)是什麼意思?

請有pacience,因爲我是一個ruby/rails/postgresql新手。

謝謝!


更新:添加了一些aditional代碼。因爲它已經在上面進行了創建,所以請不要在下面進行查詢。

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 
    ... 
+0

你能展示生成這個查詢的代碼嗎? – lx00st

+0

該查詢在代碼中完全按照這種方式編寫(減去在此計算器中的格式)。增加了一些額外的代碼,但不要認爲它比我已經發布的更有幫助。 –

+0

好吧,它是如何執行的?看起來像'gsub' token – lx00st

回答

1

它選擇記錄,其中g.program_id具有現有由@1請求返回的數組,它們設置爲查詢參數(例如SELECT...)在某處進一步在節目的值。

您可以在這裏平等使用SOME(@1)


順便說一句,嚴格來說,這不是一個SQL查詢。雖然沒有sql.execute或類似的東西,但它只是一個多行字符串分配。

+0

http://www.postgresql.org/docs/9.4/static/functions-comparisons.html#AEN19712 –