mySQL子查询导致未知列错误
我在一个数据库中有两个表。一个是按科目列出的科目列表,其中包含各种数据点(固定成本汇总)。第二个表列出了所有账户完成的所有交易以及与交易相关的佣金(comm_表)。我正在尝试运行一个查询,以输出fix_cost_summary中的所有列以及comm_表中按帐户列出的佣金总额 我的子查询导致“未知列”错误。如果我的代码有错误,请告诉我mySQL子查询导致未知列错误,mysql,Mysql,我在一个数据库中有两个表。一个是按科目列出的科目列表,其中包含各种数据点(固定成本汇总)。第二个表列出了所有账户完成的所有交易以及与交易相关的佣金(comm_表)。我正在尝试运行一个查询,以输出fix_cost_summary中的所有列以及comm_表中按帐户列出的佣金总额 我的子查询导致“未知列”错误。如果我的代码有错误,请告诉我 SELECT fix_cost_summary.*, comm_table.Short_Name, (SELECT SUM(Co
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
。请注意,通过给表添加别名,可以使整个过程稍微不那么冗长。