我正在处理一个让我发疯的问题。我正试图按联接表中的值搜索表。当前,查询将返回所有具有指定ID的结果。我只希望它返回只有两个ID的记录。
这是我的桌子布置图
creat_table champions do |t|
t.integer :id
end
create_table champions_champion_combinations do |t|
t.integer :champion_id
t.integer :champion_combination_id
end
create_table champion_combinations do |t|
t.integer :id
end
这是我的问题
SELECT
champion_combinations.*
FROM champion_combinations
INNER JOIN champions_champion_combinations
ON champions_champion_combinations.champion_combination_id = champion_combinations.id
INNER JOIN champions
ON champions.id = champions_champion_combinations.champion_id
WHERE champions.id IN (1, 2)"
从RoR ActiveRecord查询生成
ChampionCombination.joins(:champions).where(champions: {id:[1,2]})
因此,这将返回所有已加入冠军ID 1或2的冠军组合。我需要编写哪种类型的查询,它只返回与ids 1和ids 2连接的组合?
提前谢谢。
最佳答案
如果您对纯SQL解决方案感兴趣,那么可以使用GROUP BY和HAVING子句来实现您的目标。下面是sql查询:
SELECT cc.*
FROM champion_combinations AS cc
INNER JOIN champions_champion_combinations AS ccc ON ccc.champion_combination_id = cc.id
WHERE ccc.champion_id IN (1, 2)
GROUP BY cc.id
HAVING array_agg(ccc.champion_id) @> ARRAY[1,2];
PS感谢@IgorRomanchenko的建议。
关于ruby-on-rails - Postgresql INNER JOIN有多个条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29438037/