我有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