【发布时间】:2013-01-06 21:42:02
【问题描述】:
我有三个表格,其中包含通过流派表格链接在一起的模具(模具)及其图案的详细信息:
Mould table
id : integer
name : string
Pattern table
id : integer
name : string
genres table
id : integer
mould_id :integer
pattern_id : integer
我在表格中有如下数据
Mould table
ID Name
1 A1
2 A2
3 A3
53 A4
54 A5
197 A6
198 A7
1204 A8
1205 A9
Pattern Table
ID Name
1 Running
2 Scroll
Genres Table
ID mould_id pattern_id
1 1 1
2 2 1
3 3 1
4 53 1
5 53 2
6 54 1
7 197 2
8 198 1
9 1204 2
10 1205 1
根据我的计算,模具 53、197 和 1204 都有滚动模式,所以我应该能够编写以下 SQL 来给出它
SELECT m.id FROM moulds m INNER JOIN genres g
ON m.id = g.mould_id INNER JOIN patterns p
ON g.pattern_id = p.id
WHERE p.id = 2
GROUP BY m.id
HAVING COUNT(*) >= 1
但它只返回 197 所以那里有问题(或我的数据)
然后将它转换为 Rails,我将它包装在一个 find_by_sql 中,它给出了相同的结果(这是有道理的)
有人可以帮助处理 SQL 或建议一种更好的 Rails 方式来执行此类查询吗?
【问题讨论】:
-
我已经测试了你这里的东西,它对我有用(返回你提到的三个模具)。与我的测试唯一不同的是,我使用了
mould_ids,范围从 1 到 9(映射 53 到 4、54 到 5 等)。所以我怀疑你的数据有什么奇怪的地方。
标签: sql ruby-on-rails search many-to-many