mySQL子查询导致未知列错误

mySQL子查询导致未知列错误,mysql,Mysql,我在一个数据库中有两个表。一个是按科目列出的科目列表,其中包含各种数据点(固定成本汇总)。第二个表列出了所有账户完成的所有交易以及与交易相关的佣金(comm_表)。我正在尝试运行一个查询,以输出fix_cost_summary中的所有列以及comm_表中按帐户列出的佣金总额 我的子查询导致“未知列”错误。如果我的代码有错误,请告诉我 SELECT fix_cost_summary.*, comm_table.Short_Name, (SELECT SUM(Co

我在一个数据库中有两个表。一个是按科目列出的科目列表,其中包含各种数据点(固定成本汇总)。第二个表列出了所有账户完成的所有交易以及与交易相关的佣金(comm_表)。我正在尝试运行一个查询,以输出fix_cost_summary中的所有列以及comm_表中按帐户列出的佣金总额

我的子查询导致“未知列”错误。如果我的代码有错误,请告诉我

SELECT 
      fix_cost_summary.*,
     comm_table.Short_Name, 
     (SELECT SUM(Commissions) 
        FROM
             comm_table     
        GROUP BY 
             comm_table.Short_Name)
FROM
     fix_cost_summary,
     comm_table
WHERE 
     fix_cost_summary.Short_Name = comm_table.Short_name

假设
Short\u Name
fix\u cost\u summary
中是唯一的,MySQL将允许您简单地加入表,然后在该列上分组:

SELECT   fix_cost_summary.*, SUM(comm_table.Commissions)
FROM     fix_cost_summary JOIN comm_table USING (Short_Name)
GROUP BY Short_Name

内联子查询将返回超过1行。解决此问题的一种方法是将其更改为派生表:

SELECT 
      f.*,
      c.Sum_Commisions
FROM
      fix_cost_summary AS f
   JOIN
      ( SELECT Short_Name,
               SUM(Commissions) AS Sum_Commisions
        FROM
               comm_table     
        GROUP BY 
               Short_Name
      ) AS c 
         ON c.Short_Name = f.Short_Name ;

你确定所有列都存在吗@JoachimIsaksson:但是只要在
comm_table
中有多个
Short_Name
值的记录,子查询就会返回多个结果,这些结果将产生(尽管不是OP引用的错误)。@eggyal Touché,我只是想重现问题中的错误。您缺少连接条件。@Barmar thnx。当我发布时,它看起来不正确,但我不明白为什么…如果我想在SUM命令中添加WHERE子句,我该怎么做?我想对日期范围comm_table.date>X和comm_table.dateWHERE子句添加到
GROUP BY
子句之前。固定成本汇总表中列出的某些科目不在comm表中(未完成任何佣金的科目)。我仍然希望他们在结果中出现。我把它做成了一个
左连接
,我原以为可以解决它,但它没有。有什么建议吗?@Steve:是的,你对
左连接的想法是正确的,但是你需要将筛选器(当前在新的
WHERE
子句中)移动到
连接
条件中:使用(短名称)更改
to
关于固定成本汇总表。Short\u Name=comm\u table.Short\u Name和comm\u table.Date>X和comm\u table.Date
;然后,您还需要在
groupby
子句中使用表名限定对
Short\u Name的引用:
groupby fix\u cost\u summary.Short\u Name
。请注意,通过给表添加别名,可以使整个过程稍微不那么冗长。