2013-05-16 59 views
0

我在數據庫中有兩個表。其中一個帳戶列表中包含各種數據點的帳戶(fix_cost_summary)。第二個表格包含所有賬戶和與交易相關的佣金(comm_table)完成的所有交易。我試圖運行一個查詢來輸出來自fix_cost_summary的所有列和來自comm_table的帳戶的一筆佣金。mySQL子查詢導致Unkown列錯誤

我的子查詢導致「未知列」錯誤。請讓我知道我的代碼是否有錯誤。

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 
+0

您確定所有列實際存在嗎? [這似乎工作](http://sqlfiddle.com/#!2/f407f/1)。 –

+1

@JoachimIsaksson:但是,只要'comm_table'中有多個'Short_Name'值的記錄,子查詢就會返回多個結果,這將產生['ER_TOO_MANY_ROWS']](http://dev.mysql.com/doc/en /error-messages-server.html#error_er_too_many_rows)(儘管不是OP引用的錯誤)。 – eggyal

+0

@eggyalTouché,我只是試圖重現問題中的錯誤。 –

回答

2

假設Short_Namefix_cost_summary獨特,MySQL將讓您只需加入的表,然後組上欄:

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

這工作完美。非常感謝 – Stevenyc091

+0

如果我想爲SUM命令添加一個WHERE子句,我該怎麼做?我想SUM(comm_table.Commissions)的日期範圍爲comm_table.Date> X和comm_table.Date Stevenyc091

+1

@Steve:在'GROUP BY'子句之前添加'WHERE'子句。 – eggyal

0

內聯子查詢將返回超過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 ; 
+0

您錯過了連接條件。 – Barmar

+0

@Barmar thnx。我發佈時看起來不正確,但我無法弄清楚爲什麼...... –