1

多亏了对我以前的问题和这篇文章的回答,我找到了一种改写这个查询的方法:

SELECT * FROM participants
GROUP BY conversation_id
HAVING sum(user_id not in (1,3)) = 0

对此 Rails 样式查询:

Participant.find(:all, group: "conversation_id HAVING sum(user_id not in (1,3)) = 0")

我是 Rails 新手,但在我看来这是旧语法 - 最困扰我的是我在那里使用了很多 sql,而不是全部使用 Rails 语法。

我怎样才能更进一步地改写上面的查询,以便它只用 Rails 语法编写,可能不需要引号?我需要确保这将与不同的数据库一起运行。

4

1 回答 1

1

Rails 3 的方式是:

Participant.group("conversation_id").having("sum(user_id not in (1,3)) = 0")

您将无法取消 having 子句中的字符串。你对字符串有什么顾虑?上面的查询应该是相当可移植的。

于 2012-12-09T15:37:33.507 回答