2014-03-13 63 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