Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从3个表中选择数据_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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