我正在撰写类似于Facebook时间线的内容,用户可以看到所有帖子,如果用户之前喜欢该帖子,也会看到蓝色拇指。
以下是两个表格,
Posts
PostID | USERID | MORE COLS....
1 | 1 | ....
2 | 1 | ....
3 | 3 | ....
4 | 5 | ....
Likes
LikeID | POSTID | USERID | MORE COLS....
1 | 1 | 1 | ....
2 | 1 | 5 | ....
3 | 2 | 1 | ....
4 | 3 | 6 | ....
我的问题是,如何编写SQL查询以获取所有帖子,并知道用户之前是否喜欢这些帖子?
因此,例如查询的理想结果就像 (如果此用户的ID为1)
All Posts
PostID | LikedByMeBefore | ....
1 | true | ....
2 | false | ....
3 | true | ....
4 | true | ....
5 | false | ....
6 | false | ....
. | . | ....
. | . | ....
答案 0 :(得分:2)
不清楚UserID
列中的Posts
列是什么,但我可以假设它是创建它的用户。但是,Likes表中的UserID
更为明显。您需要使用LEFT JOIN
结合ISNULL
:
DECLARE @UserID INT = 5
SELECT Posts.PostID, ISNULL(Likes.LikeID, 0) AS LikedByMeBefore, ...more columns...
FROM Posts
LEFT JOIN Likes
ON Posts.PostID = Likes.PostID
AND (Likes.UserID = @UserID OR Likes.UserID IS NULL)
答案 1 :(得分:2)
据我了解,您想获取有关当前用户所有帖子的“赞”的信息吗?对? 所以,请为当前用户试试:
OrderInformationTable