Sql 从3个表中选择数据
我的问题如下Sql 从3个表中选择数据,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我的问题如下 Select UserMaster.FName, ForumMaster.Topic, ForumMaster.TopicID, ForumMaster.DateCreated, ( select CommentMaster.TopicID, COUNT(CommentMaster.CommentID)as [count] from CommentMaster,ForumMas
Select UserMaster.FName,
ForumMaster.Topic,
ForumMaster.TopicID,
ForumMaster.DateCreated,
(
select CommentMaster.TopicID, COUNT(CommentMaster.CommentID)as [count]
from CommentMaster,ForumMaster
where ForumMaster.TopicID=CommentMaster.TopicID
group by CommentMaster.TopicID
)
from UserMaster inner join ForumMaster
on UserMaster.UserID=ForumMaster.UserID
我的桌子如下
UserMaster(UserID、FName、LName)
CommentMaster(CommentID,TopicID)
ForumMaster(主题ID、用户ID、主题、创建日期)
而我的错误就在下面
“当
子查询不是以EXISTS“”引入的
预期结果
Fname |主题|主题ID |日期创建|计数
abc | Java | 001 | 2-1-2013 | 4这是您的查询,使用正确的联接语法和表别名修复:
Select um.FName, fm.Topic, fm.TopicID, fm.DateCreated,
(select cm.TopicID, COUNT(cm.CommentID)as [count]
from CommentMaster cm join
ForumMaster fm
on fm.TopicID = cm.TopicID
group by cm.TopicID
)
from UserMaster um inner join
ForumMaster fm
on um.UserID = fm.UserID;
嵌套的select
中的子查询有两个返回值。这是一个禁忌。您需要的是一个相关子查询或显式聚合。以下是显式聚合:
Select um.FName, fm.Topic, fm.TopicID, fm.DateCreated, coalesce(c.[count], 0) as [count]
from UserMaster um inner join
ForumMaster fm
on um.UserID = fm.UserID left join
(select cm.TopicID, COUNT(cm.CommentID)as [count]
from CommentMaster cm
group by cm.TopicID
) c
on c.TopidId = fm.TopicId;
请注意,子查询中不需要表
ForumMaster
。按如下所示重写查询
Select UserMaster.FName,
ForumMaster.Topic,
ForumMaster.TopicID,
ForumMaster.DateCreated,
c.[count]
from ForumMaster
inner join (select CommentMaster.TopicID, COUNT(CommentMaster.CommentID) as [count] group by CommentMaster.TopicID) as c
on ForumMaster.TopicID=c.TopicID
inner join UserMaster
on UserMaster.UserID=ForumMaster.UserID