TSQL 在查询和查询中的变化

TSQL change in query to and query

我有一对多关系table

ReviewId     EffectId
1       |    2
1       |    5
1       |    8
2       |    2
2       |    5
2       |    9
2       |    3
3       |    3
3       |    2
3       |    9

在网站上用户select他选择的每个效果,我都得到了相关的评论。 我做了一个 in 查询 例如,如果用户 select 影响 2 和 5 我的查询:“

select reviewed from table_name where effected in(2,5)

现在我需要得到所有包含这两种效果的评论 所有具有效果 2 和效果 5 的评论 最好的查询是什么? 对我来说重要的是查询将尽快 运行 。 为此,我还可以更改 table 架构(如果需要),例如添加一个包含所有效果的缓存字段,如

Reviewed      cachedEffects
1          |  ,2,5,8
2          |  ,2,5,9,3,
3          |  ,3,2,9

你可以这样做:

 select reviewid
 from 
 tbl
 where effectid in (2,5)
 group by reviewid
 having count(distinct effectid) > 1

Demo

count (distinct effectid)用于确保结果只包含那些reviewIDs,这些reviewIDs有多个不同effectID值的记录。 where 子句用于根据您同时具有 2 和 5 的过滤条件进行过滤。

这里要注意的关键是我们按 reviewID 分组,并且还使用不同 effectID 值的计数来确保只有那些同时具有 2 和 5 的记录是 return编辑。如果我们不这样做,查询将 return 所有 effectID 等于 2 或 5 的行。

为了提高性能,您可以在 reviewID 上创建索引。