2012-11-07 118 views
0

我有兩個表a_dailyo_daily_lcsgenerationSQL錯誤(1242):子查詢返回超過1行

我試圖此查詢:

update a_daily 
set 
    a_daily.Turbine_Generation = 
    (
    select sum(o_daily_lcsgeneration.Turbine_Generation) 
    from o_daily_lcsgeneration 
    where o_daily_lcsgeneration.Location = 1 
    group by o_daily_lcsgeneration.Date 
) 

但收到上述錯誤說子查詢更多比1行

回答

3

除去GROUP BY子句

UPDATE a_daily 
SET a_daily.Turbine_Generation = 
(
     SELECT sum(o_daily_lcsgeneration.Turbine_Generation) 
     FROM o_daily_lcsgeneration 
     WHERE o_daily_lcsgeneration.Location = 1 
) 

它會導致查詢返回多個值,您有多個日期。

更新1

UPDATE a_daily a 
     INNER JOIN 
     (
      select g.Date, sum(g.Turbine_Generation) totalSum 
      from o_daily_lcsgeneration g 
      where g.Location = 1 
      group by g.Date 
     ) b ON a.date = b.date 
SET  a.Turbine_Generation = b.totalSum 
WHERE  a.location = 1 

UPDATE a_daily a 
     LEFT JOIN JOIN 
     (
      select g.Date, sum(g.Turbine_Generation) totalSum 
      from o_daily_lcsgeneration g 
      where g.Location = 1 
      group by g.Date 
     ) b ON a.date = b.date 
SET  a.Turbine_Generation = COALESCE(b.totalSum, 0) 
+0

其實我需要總結(o_daily_lcsgeneration.Turbine_Generation)約會!有沒有其他解決方案 –

+0

那麼如果你的子查詢中返回了多個值,你如何更新'a_daily.Turbine_Generation'的值?你可以添加表格的模式嗎?你有'a_daily'表上的日期,你想匹配你的子查詢? –

+0

是的,我在a_daily表中有日期列 –

1

運行子查詢,你會看到它返回不止一行。您按日期對結果進行分組,因此SUM表達式會計算每天的值。你可以重新編寫查詢如下:

UPDATE a_daily 
SET a_daily.Turbine_Generation = (SELECT SUM(o_daily_lcsgeneration.Turbine_Generation) 
            FROM o_daily_lcsgeneration 
            WHERE o_daily_lcsgeneration.Location = 1 
            AND o_daily_lcsgeneration.Date = 'YYYY-MM-DD' 
           GROUP BY o_daily_lcsgeneration.Date) 

或(對所有事件的總和):與分組的

UPDATE a_daily 
SET a_daily.Turbine_Generation = (SELECT SUM(o_daily_lcsgeneration.Turbine_Generation) 
            FROM o_daily_lcsgeneration 
            WHERE o_daily_lcsgeneration.Location = 1) 
1
update a_daily 
set 
    a_daily.Turbine_Generation = (
    select sum(o_daily_lcsgeneration.Turbine_Generation) 
    from o_daily_lcsgeneration where o_daily_lcsgeneration.Location = a_daily.Location 
    group by o_daily_lcsgeneration.Date 
) 
相關問題