0

私は2つのテーブルa_dailyを持っていますo_daily_lcsgeneration

私はこのクエリを試しています:

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行を超えるという上記のエラーを受け取りました

4

3 に答える 3

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)
于 2012-11-07T05:30:41.147 に答える
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)
于 2012-11-07T05:34:03.840 に答える
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
  )
于 2012-11-07T05:35:20.733 に答える