1

如果你做不到,SQL 怎么做呢?

基本上我想选择我所有的问题对象,其中至少有两个具有相同的属性。可以说,该属性称为word_id.

那么我如何只选择与另一个对象共享一次公共属性的所有对象呢?

如果我有三个对象:

# Question(id: 1, word_id: 1)
# Question(id: 2, word_id: 2)
# Question(id: 3, word_id: 2)
# Question(id: 4, word_id: 1)
# Question(id: 5, word_id: 1)
# Question(id: 6, word_id: 1)

我只想返回 id 23因为它们都共享一个共同的属性两次。

那可能吗?我粗略地通过对数据库进行两次调用来做到这一点,首先我调用所有有问题的对象,将它们添加到一个数组中,然后从该数组中减去符合我要求的对象。我只是好奇是否有一种更优雅的方式可以一次完成所有操作。

4

1 回答 1

1

只是 SQL:

SELECT * FROM questions WHERE world_id IN (
    SELECT world_id FROM questions GROUP BY world_id HAVING count(*) = 2
)

导轨:

Question.where("world_id IN (?)", Question.find(:all, select: "world_id", 
                                                group: "world_id HAVING count(*) = 2"))

我想这仍然是两个查询...

于 2013-05-07T21:02:34.523 回答