我有一张存储帖子的表格。我想创建一个查询来检索帖子,如果当前用户喜欢这篇文章。这是我的问题:
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
有比这更好的查询吗?
答案 0 :(得分:1)
尝试使用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);
如果用户多于帖子。
如果索引有帮助,请检查执行计划。