0

我的尝试是返回那些有“is_read = 0”电子邮件的人的信息:

 SELECT 
        a.*, b.*,c.*, COUNT(a.EmailNum) as NumEmails
    FROM 
        Emails.emails a
    inner join 
        Employees.user b on a.ID=b.id 
    inner join 
        Employees.dept c on b.dept=c.deptid
    where 
        a.is_read='0'and c.deptName='HR';
    group by 
        b.id

电子邮件。电子邮件(表):

   emailNum, id, emailcontent,receivers
   1       , 11, "sasa"      ,sa@gmail.com

雇员:

   user(Table)
   userId, firstName, lastName, dept
   1`    , 'John'   ,  'Brown', 55

雇员:

       dept(Table)
   deptId, deptName
   55    , 'HR'  

我的尝试给出了:

  emailNum, id  ,  emailcontent, receivers,   userId, firstName, lastName, dept, deptId, deptName
   null   , null,  null        ,  null    ,    null ,    null  ,  null   , null  ,  55  , 'HR' 

但我希望它不会返回任何东西!

谢谢

4

2 回答 2

3

您的子句和您;之间有一个:WHEREGROUP BY

where 
    a.is_read='0'and c.deptName='HR';
group by 

这将您的查询分成两部分......第一部分运行时没有GROUP BY,第二部分给您一个错误。

当查询在没有 的情况下运行时,由于聚合函数,GROUP BY您会得到一行包含NULL值而不是空结果集。

删除;,您应该会得到预期的结果。

SQL Fiddle 与;.

没有;.

于 2013-07-26T20:16:20.610 回答
-1

试试这个,内连接通常是相互嵌套的

SELECT 
    a.*
   ,b.*
   ,c.*
   ,COUNT(a.EmailNum) as NumEmails

FROM 
   Emails.emails a
       inner join Employees.user b 

            inner join Employees.dept c 
            on b.dept=c.deptid

       on a.ID=b.id 

WHERE 
   a.is_read='0'
   and c.deptName='HR';
group by 
   b.id

(另外,尝试按 a. 、 b.、 c.* 分组)

于 2013-07-26T20:05:01.633 回答