我有故事表,用户表和喜欢的表。
我想在故事表上执行查询,其中包括user_liked(BOOLEAN TRUE或FALSE),具体取决于在likes表中是否有记录ID和给定用户ID的记录。
因此,如果此用户喜欢并且user_liked为false,则从其中user_liked为true的故事中选择all(和user_liked)。
希望有道理吗?
答案 0 :(得分:0)
MS SQL Serer本身不存在Boolean数据类型。您应该改为使用bit日期类型。
字符串值TRUE和FALSE可以 转换为位值:TRUE是 转换为1并转换为FALSE 到0。
在不知道您的确切架构和数据库规则的情况下,我认为这可能适合您。
Select u.UserId,
s.StoryId
Cast((Case When l.UserId Is Null Then 0 Else 1 End) as bit) as [UserLiked]
From Users u
Left Join Likes l on u.UserId = l.UserId
Left Join Stories s on l.UserId = s.UserId
Where u.UserId = @SomeUserId
答案 1 :(得分:0)
这似乎有效:
SELECT s.*, exists (select l.id from likes l where l.user_id = '1' and l.story_id = s.id) as user_likes FROM stories s;
我不知道存在exists()函数! ;)
@barry和@ Scorpi0 - 谢谢你的想法