我有一对多关系表
ReviewId EffectId
1 | 2
1 | 5
1 | 8
2 | 2
2 | 5
2 | 9
2 | 3
3 | 3
3 | 2
3 | 9
在网站中,用户选择他选择的每种效果,并获得所有相关评论。
我发了in
个查询
例如,如果用户选择效果2和5
我的询问:“
select reviewed from table_name where effected in(2,5)
现在我需要获得包含两种效果的所有评论 所有具有效果2和效果5的评论 什么是最好的查询来做到这一点? 对我来说重要的是查询将尽可能快地运行。 为此,我还可以更改表模式(如果需要),例如添加一个包含所有效果的缓存字段,如逗号
Reviewed cachedEffects
1 | ,2,5,8
2 | ,2,5,9,3,
3 | ,3,2,9
答案 0 :(得分:1)
你可以这样做:
select reviewid
from
tbl
where effectid in (2,5)
group by reviewid
having count(distinct effectid) > 1
count (distinct effectid)
用于确保结果仅包含具有不同reviewID
值的多个记录的effectID
个。 where
子句用于根据过滤条件同时过滤掉2和5。
这里要注意的关键是我们按reviewID
进行分组,并使用不同effectID
值的计数来确保只返回那些同时包含2和5的记录。如果我们不这样做,查询将返回effectID
等于2或5的所有行。
为了提高性能,您可以在reviewID
上创建索引。