2016-10-24 60 views
0

我想在我的查詢中執行兩個單獨的內部表連接以從兩個表中返回值。一個查詢的兩個表連接 - 令人困惑的結果

SELECT pname, avg(salary) 
    FROM project p INNER JOIN department d on p.dnum = d.dnumber 
    INNER JOIN employee e ON e.dno = d.dnumber; 

我在結果集中得到一行... pname = null,avg(salary)= null。 結果集應該包含11行,因爲模式中有11個項目。

有人能指出我正確的方向嗎?

謝謝

回答

2

你缺少group by

SELECT pname, avg(salary) 
FROM project p INNER JOIN 
    department d 
    on p.dnum = d.dnumber INNER JOIN 
    employee e 
    ON e.dno = d.dnumber 
GROUP BY pname; 

在大多數的數據庫,你的版本會失敗,一個明顯的語法錯誤。如果您使用ONLY_FULL_GROUP_BY模式,MySQL僅強制使用ANSI標準(請參閱here)。

+0

由PNAME添加組;子句似乎返回0行。 –

+0

@ Matthew.learn。 。 。這將是一個不同的問題 - 你的加入條件似乎是不正確的。您可能需要提供另一個問題樣本數據和期望的結果。 –

+1

@onedaywhen。 。 。我想你誤解了評論。這是關於OP的原始查詢。我澄清。 –

0

使用LEFT OUTER JOIN,而不是內部聯接 或者你可以告訴我你的數據表

0

你需要的department表中查詢?

以下查詢是否會返回需要彙總的所有數據?

SELECT pname, salary 
    FROM (SELECT salary, dno AS dnum FROM employee) e 
     NATURAL JOIN project; 

如果是這樣,那麼這可能是你需要的總結:

SELECT pname, AVG(salary) AS average_salary 
    FROM (SELECT salary, dno AS dnum FROM employee) e 
     NATURAL JOIN project 
GROUP 
    BY pname;