2013-10-20 92 views

回答

0

好吧,你有一些語法錯誤:

  1. COUNT(Something)是要選擇的東西,所以它應該在「d.dname」之後用逗號分隔。此外,就像Guillaume指出的那樣,它是一列而不是一個字符串,因此不需要引號:
    SELECT d.deptno,d.dname,COUNT(e.empno)
  2. 您可以使用別名如「d」和「e」,但你沒有定義它們。你會做這樣的:
    「FROM部門D」
  3. 瞭如下聯接應該寫成:
    「INNER JOIN職工E對e.deptno = d.deptno
    (這在技術上是沒有語法錯誤,但我建議使用內部連接明確)
  4. 的意見應該與前綴「 - 」

PS假定T-SQL/MS SQL服務器這裏

+1

您的第三點是* not *語法錯誤。做一個交叉連接,然後在'WHERE'子句中過濾是很好的。 –

+0

同意,讓我編輯。但是你認爲查詢優化器會自動進行內部連接?它可能,但我會一直寫明確連接。更可讀,特別是如果你有多個連接。對? – Martao

+0

絕對正確! –

0

它看起來像你對我可能。正在使用Oracle,其中cas e修復相當簡單:

SELECT d.deptno, d.dname, count(e.empno) "number of employees" 
FROM dept d, emp e 
WHERE d.deptno = e.deptno 
GROUP BY d.deptno, d.dname 

您需要明確地告訴DB什麼別名引用。該錯誤消息可能提及無效/缺少標識符'd',這意味着它不知道那是什麼。

+0

那不是FROM語句做一個笛卡爾積,而不是一個內部連接? – Martao

+0

我不這麼認爲,我認爲它在Oracle中的實施方式稍有不同,因爲它們在標準方面表現不佳。 AFAIK比使用'內部連接'表現更好,因爲這是在事後纔開始實施的。 – nbrooks

1

在SQL服務器,它會像

SELECT d.deptno,d.dname, 
COUNT(e.empno) as number_of_employees 
FROM dept d,emp e 
WHERE d.deptno = e.deptno 
GROUP BY d.deptno,d.dname 


the error occurs when you undefined the instance of the table used 

以防萬一更加優化將是

SELECT d.deptno,d.dname, COUNT(e.empno)作爲number_of_employees FROM部門ð加入EMPê 上d.deptno = e.deptno GROUP BY d.deptno,d.dname

+0

如果有人使用Microsoft Dynamics CRM,我在此創建了一個變體,以顯示此查詢中每個帳戶的聯繫人數量:SELECT a.AccountId,a.Name, COUNT(c.ParentCustomerId)作爲number_of_contacts FROM accountbase a,contactbase c WHERE a.accountid = c.ParentCustomerId GROUP BY a.accountid,a.Name –

相關問題