我有2个表:组和组。两者都使用第三个表set_has_groups进行连接。 我想获得集,都集团我指定做着选择与多对多连接表中所有组匹配的记录
一种方式这将是
SELECT column1, column2 FROM sets WHERE
id IN(SELECT set_id FROM set_has_group WHERE group_id = 1)
AND id IN(SELECT set_id FROM set_has_group WHERE group_id = 2)
AND id IN(SELECT set_id FROM set_has_group WHERE group_id = 3)
显然这不是最漂亮的解决方案
我也试过这个:
SELECT column1, column2 FROM sets WHERE
id IN(SELECT set_id FROM set_has_group WHERE group_id IN(1,2,3) GROUP BY group_id
HAVING COUNT(*) = 3
这看起来更漂亮,但问题是它需要永远执行。 第一次查询运行时间为200毫秒,第二次查询时间超过1分钟。
任何想法为什么这是?
===更新: 我打这个多一些,我修改了2次这样的查询
SELECT columns FROM `set` WHERE id IN(
select set_id FROM
(
SELECT set_id FROM set_has_group
WHERE group_id IN(1,2,3)
GROUP BY set_id HAVING COUNT(*) = 3
) as temp
)
这是真的快 这是相同的作为第二查询之前只是我包它在另一个临时表 很奇怪
是否设置组的集合或组的集合,或两者的集合?你的命名有点混乱。 – 2009-09-17 19:27:20
集是主要的数据模型,他们可能被'标记'属于几个组 我试图找到属于组1,2和3的集 – MarcS 2009-09-17 19:29:08