小编Shi*_*r K的帖子

使用 4 个表的 JOIN 查询的结果不正确

如果有人可以帮助我进行下面的查询,那就太好了!这个查询很有挑战性,我尝试自己做,但无法显示正确的结果......

我使用类似于“Facebook”的系统的数据库。

查询应显示去年为每个帖子发表评论的用户的电子邮件和姓名,这些帖子由他们的每个朋友发布。

意思是,我只想显示对所有朋友的所有帖子发表评论的人。


这是我的试验,但我收到了部分结果。我无法理解我做错了什么。

select distinct U.Mail, U.FirstName + ' ' + U.LastName as FullName 
from Users U
inner join FriendsList FL on U.Mail = FL.Mail1
inner join Post P on FL.Mail2 = P.UserMail
left outer join Comment C on P.ID = C.IDPost and P.UserMail <> C.Mail
where datediff(year, P.DatePosted, getdate()) <= 1
group by U.Mail, U.FirstName, U.LastName
having count(distinct P.ID) = count(distinct C.IDPost)
Run Code Online (Sandbox Code Playgroud)

BAK文件链接(包括测试数据):https : //file.io/SagvM3cx

表格图: 在此处输入图片说明


例子:

让我们假设 I & Adam & Ben 是朋友。

?? 第一种情况: …

sql-server relational-division

4
推荐指数
1
解决办法
52
查看次数

使用 'case when count()=0' &amp; 'where' 时结果不正确

如果有人能帮我解决这个问题,我将不胜感激。使用case when count()=0&时我似乎无法得到正确的结果where


我使用 SQL Server,使用类似于“Facebook”的系统数据库。

我正在尝试编写一个查询,显示电子邮件地址、标记状态和过去一个月发布的帖子数量。标记状态应如下: 如果标记 1-2 个帖子-显示“很少” 如果标记 3-5 个帖子-显示“中等” 如果标记 5+ 个帖子-显示“许多” 如果根本不标记-显示“无” .

下面是我写的查询。我写的查询的问题是,由于 WHERE 中的条件,我永远不会收到“none”。

如何更改查询以显示正确的结果?

select U.Mail, count(P.ID) as PostCount, 
  case 
    when count(P.ID) = 0 then 'none'
        when count(P.ID) <= 2 then 'few'
        when count(P.ID) <= 5 then 'medium'
    else 'many'
  end PostCountCategory
from Users U 
    left join Tagging T on U.Mail = T.Mail
    left join Post P on T.IDPost = P.ID
where datediff(day,P.DatePosted,getdate()) <= 30 --Because of this condition …
Run Code Online (Sandbox Code Playgroud)

sql-server relational-theory

3
推荐指数
1
解决办法
222
查看次数