如何在SQL中返回条件布尔值

时间:2011-06-15 09:38:56

标签: sql activerecord arel

我有故事表,用户表和喜欢的表。

我想在故事表上执行查询,其中包括user_liked(BOOLEAN TRUE或FALSE),具体取决于在likes表中是否有记录ID和给定用户ID的记录。

因此,如果此用户喜欢并且user_liked为false,则从其中user_liked为true的故事中选择all(和user_liked)。

希望有道理吗?

2 个答案:

答案 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 - 谢谢你的想法