2014-03-13 62 views
-6

我在“reportsTo”中的内容与employeeNumber类似,所以问题是什么?用于IN子句我有一个错误,我不明白。你可以帮我吗?

SELECT firstName,lastName,temp.count 
FROM employees 
where employeeNumber in(

SELECT reportsTo, COUNT(*) AS count 
FROM employees 
GROUP BY reportsTo 
) as temp 
+0

你告诉我们。你得到的错误是什么? –

+1

EmployeeNumber **不能**两个不同的两列不同的列,或者在你的情况下列和计算值。 – Zane

+2

请将您的问题标题描述为描述您实际问题的内容。 “我有一个我不明白的错误,你能帮我吗?”对于未来的读者来说,在试图解决他们的问题时在搜索结果中找到它是完全没有用的,并且它不会提供任何关于您在此问的问题的信息。 –

回答

2

子查询不能返回多列,所以你不能有SELECT reportsTo, COUNT(*) AS count里面。您可能想要加入子查询,如下所示:

SELECT firstName,lastName,temp.count 
FROM employees 
INNER JOIN (
    SELECT reportsTo, COUNT(*) AS count 
    FROM employees 
    GROUP BY reportsTo 
) temp ON employees.employeeNumber = temp.reportsTo 

声明:我不使用MySQL,因此上述语法可能不准确。

您可能会遇到问题,试图使用count作为列名。重命名或转义它(SQL Server使用[],不确定MySQL)。

+0

谢谢!但我的意思是,类似的加入,所以请解释我的差异,因为我没有得到它... – user3374271

0

真的不知道你wan't什么,但只是将其更改为:

SELECT firstName, 
     lastName 
    FROM employees 
WHERE employeeNumber in(SELECT reportsTo 
          FROM employees 
         GROUP BY reportsTo) 

删除计数和别名会工作,但我觉得你真正想要的是:

SELECT manager.firstName, 
     manager.lastName, 
     temp.count  AS number_of_directs 
    FROM (SELECT reportsTo, 
       COUNT(*) AS count 
      FROM employees 
     GROUP BY reportsTo) as temp 
INNER JOIN employees AS manager ON manager.reportsTo = temp.reportsTo