SQL查询在关联表的同一列上的多个匹配项

时间:2017-10-27 02:12:16

标签: postgresql activerecord ruby-on-rails-5

我有两张桌子,桌子和桌子。酒吧属于foos,而foos有多个酒吧(通过ActiveRecord)。我想找到一个foo,其中包含完全(且唯一)一个给定的条形名称列表。

E.g。 (请原谅任何伪代码)

bars_list = ["A", "B"]
foo = find_foo(bars_list)
foo.bars.map(&:name) = ["A", "B"]

查找foo不一定非必须是一个严格的函数。它可以是一个SQL查询来返回匹配的foo ID或非常有效的ActiveRecord函数。谢谢!

1 个答案:

答案 0 :(得分:0)

使用GROUP BYHAVING过滤所需匹配条形记录数的结果集:

SELECT foos.*
FROM foos
JOIN bars ON bars.foo_id = foos.id
WHERE bars.name IN ('bar1', 'bar2')
GROUP BY foos.id, foos.name
HAVING COUNT(*) = 2;

如果您有三个名字,请检查COUNT(*) = 3,依此类推。