我有3张桌子
Tags
TagID
TagName
Users
UserID
Username
UsersFollowingTags
UFTID
UserID
TagID
许多用户可以关注许多代码。
我需要一个SQL语句来生成一个结果集,其中包含所有tagID& s& tagNames - 以及一个表示UserID是否跟随该标记的字段。
我尝试了左连接 - 但如果我包含WHERE userID = @userID - 它不会输出用户不会关注的标记。
指示相关行的字段可能只是一点 - 或者用户ID - 在那里是灵活的。
THX
答案 0 :(得分:1)
而不是将userid=@userId
放在where
子句中,将其添加到left join
子句中,您就可以了。
如果您在where
表格中添加了left joined
条款,则会与inner join
相同。
如果您想要可能的以下用户名
,那就是这样的select t.TagName, u.UserName
from Tags t
left join UsersFollowingTags uft on uft.TagID = t.TagID
left join Users u on u.UserId = uft.UserId and uft.userID = @userId
或者如果UserID足够
select t.TagName, uft.UserID
from Tags t
left join UsersFollowingTags uft on uft.TagID = t.TagID and uft.userID = @userId
或“bit”
select t.TagName, case when uft.UserID is null then 0 else 1 end as isfollowing
from Tags t
left join UsersFollowingTags uft on uft.TagID = t.TagID and uft.userID = @userId
答案 1 :(得分:1)
您可以使用CASE WHEN EXISTS
:
SELECT t.TagID,
t.TagName,
UserFollowing = CASE WHEN EXISTS(SELECT 1 FROM UsersFollowingTags uft
WHERE t.TagID = uft.TagID
AND utf.UserID = @userID)
THEN 'Yes, user follows this tag'
ELSE 'No, user does not follow this tag' END
FROM dbo.Tags t