2017-02-20 53 views
0

我有這樣的情況,當我運行一個查詢:查詢不能顯示賬戶姓名和公司名稱如預期

ACCOUNT 
----------- 
account_id account_name 
1   STARCLASS 
2   STEPWAY 


COMPANY 
----------- 
company_id  company_account_id  company_name 
1    1      STORE 01 
2    2      STORE 01 
3    2      STORE 02 


RESUME 
----------- 
resume_id resume_company_id resume_start_date resume_end_date resume_total 
1   1     2017-01-01   2017-01-31   300.00 
2   2     2017-01-01   2017-01-31   147.00 
3   3     2017-01-01   2017-01-31   50.00 


QUERY 
----------- 
SELECT * 
FROM resume 
LEFT JOIN company ON company_id = resume_company_id 
LEFT JOIN account ON account_id = company_account_id 
GROUP BY account_id 

WHILE 
----------- 
while ($i < $num) { 
....... 
$account_name = mysql_result($result,$i,"account_name"); 
$company_name = mysql_result($result,$i,"company_name"); 
....... 


QUERY RESULTS 
----------- 
ID company_name    account_name resume_start_date resume_end_date resume_total 
1  STORE 01     STARCLASS  2017-01-01   2017-01-31   300.00 
2  STORE 01     STEPWAY   2017-01-01   2017-01-31   147.00 
3  **NOT SHOW COMPANY NAME**     2017-01-01   2017-01-31   50.00 
     **AND ACCOUNT NAME** 

當我按ACCOUNT_ID最後一行的變量鏈接纔可ACCOUNT_NAME和COMPANY_NAME顯示爲空白。

有辦法解決? 關於這方面的任何提示?

謝謝大家的幫助

+0

從「LEFT JOIN」加入的表中的「GROUP BY」列幾乎是不對的。所有與該列不匹配的行將具有相同的「NULL」值,因此它們將全部組合在一起。 – Barmar

+0

爲什麼在不使用任何聚合函數時按'account_id'進行分組?這隻會從該組中的隨機行中選取其他列。 – Barmar

+0

我無法重現該問題:http://www.sqlfiddle.com/#!9/cef05/1 – Barmar

回答

0

應該包括不通過聚合函數傳遞的表達式。另外,我不確定你使用的軟件包版本,但是我的結果只包含兩行。

要麼

  1. 你的意思是使用ORDER BY,而不是GROUP BY。 GROUP BY主要用於在「組」行上應用聚合(例如,SELECT SUM(resume_total).... GROUP BY account_id)。
  2. 您的SQL(不符合)會創建一個錯誤,其中將對LEFT JOIN子句的結果進行分組,而您的SELECT * FROM resume仍在執行中(3條記錄,但對於LEFT JOIN值只有兩條值的值)。
  3. 別的東西。

要麼使用ORDER BY,要麼使用列表,或使用GROUP BY與選定的表達式或聚合函數。

相關問題