Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 能否在Rails活动记录中按计数选择唯一?_Sql_Ruby On Rails_Postgresql - Fatal编程技术网

Sql 能否在Rails活动记录中按计数选择唯一?

Sql 能否在Rails活动记录中按计数选择唯一?,sql,ruby-on-rails,postgresql,Sql,Ruby On Rails,Postgresql,如果你做不到,SQL会怎么做 基本上,我希望选择至少有两个具有相同属性的问题对象。该属性被称为,word\u 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) # Q

如果你做不到,SQL会怎么做

基本上,我希望选择至少有两个具有相同属性的问题对象。该属性被称为,
word\u 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的
2
3
,因为它们两次共享一个公共属性

可能吗?我粗略地对DB进行了两次调用,首先调用所有有问题的对象,将它们添加到一个数组中,然后从该数组中减去符合我要求的对象。我只是想知道是否有一种更优雅的方法可以同时完成这一切。

just 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"))
我想这仍然是两个查询…

只是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"))

我想还是有两个问题…

哇,上面的评论太棒了。非常感谢各位!哇,上面的评论太棒了。非常感谢各位!