我有一个存储帖子的表格。我想创建一个查询来检索帖子,以及当前用户是否喜欢这篇帖子。这是我的问题:
select *,CAST(iif(exists(select 1 from Post.PostLike where PostId=ps.Id and UserId=@UserId),1,0) as bit) as IsLiked
from Post.Post ps
还有比这更好的查询吗?
发布于 2018-06-18 02:41:02
尝试使用LEFT JOIN
。
SELECT ps.*,
convert(bit, CASE
WHEN psl.userid IS NULL
THEN 0
ELSE 1
END) isliked
FROM post.post
LEFT JOIN post.postlike psl
ON ps1.postid = ps.id
AND psl.userid = @userid;
然后在post.post.id
上创建一个索引(除非它已经有一个索引,这应该是主键列的情况),并在post.postlike.postid
和post.postlike.userid
上创建一个索引(同样,除非这样的索引已经存在,列可能是主键,这是合理的)。
CREATE INDEX post_id
ON post.post
(id);
CREATE INDEX postlike_postid_userid
ON post.postlike
(postid,
userid);
或者也可以将最后一个更改为
CREATE INDEX postlike_userid_postid
ON post.postlike
(userid,
postid);
如果有比帖子更多的用户。
如果索引有帮助,请检查执行计划。
https://stackoverflow.com/questions/50896009
复制相似问题