2017-02-20 78 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与选定的表达式或聚合函数。

相关问题