Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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
Postgresql SQL查询关联表的同一列上的多个匹配项_Postgresql_Activerecord_Ruby On Rails 5 - Fatal编程技术网

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

Postgresql SQL查询关联表的同一列上的多个匹配项,postgresql,activerecord,ruby-on-rails-5,Postgresql,Activerecord,Ruby On Rails 5,我有两张桌子,食物和酒吧。条形图属于foos,foos有多个条形图(通过ActiveRecord)。我想找到一个foo,它有一个精确(且仅)给定的酒吧名称列表的酒吧 例如(请原谅任何伪代码) Find foo不一定严格地说是一个函数。它可以是一个SQL查询来返回匹配的foo ID,也可以是非常高效的ActiveRecord函数。谢谢 使用GROUP BY和HAVING过滤结果集以获得所需数量的匹配条记录: SELECT foos.* FROM foos JOIN bars ON bars.foo

我有两张桌子,食物和酒吧。条形图属于foos,foos有多个条形图(通过ActiveRecord)。我想找到一个foo,它有一个精确(且仅)给定的酒吧名称列表的酒吧

例如(请原谅任何伪代码)


Find foo不一定严格地说是一个函数。它可以是一个SQL查询来返回匹配的foo ID,也可以是非常高效的ActiveRecord函数。谢谢

使用
GROUP BY
HAVING
过滤结果集以获得所需数量的匹配条记录:

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
,依此类推。

使用
分组依据
拥有
来筛选结果集,以获得所需数量的匹配条记录:

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
,依此类推。

我使用了一个带有内部联接的SQL查询,使用WHERE EXISTS…bar.name=?。。。并且存在。。。bar.name=。。。但是对于同时存在bar.name=“A”和bar.name=“B”的foos,这并没有得到任何匹配。有趣的是,如果我使用了EXISTS,它会返回所有正确的foos。。。或者存在。。。但是我需要它们都存在。我使用了一个SQL查询,使用WHERE EXISTS…bar.name=?。。。并且存在。。。bar.name=。。。但是对于同时存在bar.name=“A”和bar.name=“B”的foos,这并没有得到任何匹配。有趣的是,如果我使用了EXISTS,它会返回所有正确的foos。。。或者存在。。。但我需要它们都存在。