,我有以下數據:簡化和/或優化與INTERSECT SQL查詢或HAVING
tag_id | taggable_id
--------+-------------
1 | 1
2 | 1
3 | 1
4 | 1
1 | 2
2 | 2
5 | 2
6 | 2
7 | 3
8 | 3
9 | 3
10 | 3
而且我希望把所有這一切都是在一組tag_ids的,而在另一個組和另一個taggable_ids .. (最多4組)。
例如:
- 如果我搜索所有與TAG_ID 1或7 AND TAG_ID的taggable_ids 4應該返回僅有1
- 如果我搜索所有與TAG_ID 1 taggable_ids AND TAG_ID 6和TAG_ID 2或8應返回僅有2
- 如果我搜索所有TAG_ID 8 taggable_ids和TAG_ID 5不應該返回IDS
在一個總的方式(對第二個例子),查詢如下:
SELECT taggable_id FROM taggings WHERE tag_id in (1)
INTERSECT
SELECT taggable_id FROM taggings WHERE tag_id in (6)
INTERSECT
SELECT taggable_id FROM taggings WHERE tag_id in (2,8)
我想簡化它,它看起來像:
SELECT taggable_id FROM taggings WHERE tag_id in (1,2,6,8)
GROUP BY taggable_id HAVING COUNT(*)=3
,但我不知道是否能以更簡單的方式來完成。有什麼想法嗎?
你的第二個查詢看起來很簡單。 – 2014-12-05 19:17:56
'(tag_id,taggable_id)'被定義爲唯一的,對吧? – 2014-12-05 21:49:47
您的查詢與您的描述不符。而你的第二個是*不等於第一個。提出一個一致的例子將是謹慎的。 – 2014-12-05 22:23:21