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
count (distinct effectid)
用于确保结果只包含那些reviewID
s,这些reviewID
s有多个不同effectID
值的记录。 where
子句用于根据您同时具有 2 和 5 的过滤条件进行过滤。
这里要注意的关键是我们按 reviewID
分组,并且还使用不同 effectID
值的计数来确保只有那些同时具有 2 和 5 的记录是 return编辑。如果我们不这样做,查询将 return 所有 effectID
等于 2 或 5 的行。
为了提高性能,您可以在 reviewID
上创建索引。
我有一对多关系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
count (distinct effectid)
用于确保结果只包含那些reviewID
s,这些reviewID
s有多个不同effectID
值的记录。 where
子句用于根据您同时具有 2 和 5 的过滤条件进行过滤。
这里要注意的关键是我们按 reviewID
分组,并且还使用不同 effectID
值的计数来确保只有那些同时具有 2 和 5 的记录是 return编辑。如果我们不这样做,查询将 return 所有 effectID
等于 2 或 5 的行。
为了提高性能,您可以在 reviewID
上创建索引。