1

type = 1親 = 行の id である行の合計の合計ですべてを更新する sql を作成する正しい方法は何ですかtype=1?

簡単に言えば: likesd set totals を更新 = すべての合計の合計親 = 行の ID、タイプ = 1

"id"    "type"  "parent"    "country"   "totals"
"3"     "1"     "1"         "US"        "6"
"4"     "2"     "3"         "US"        "6"
"5"     "3"     "3"         "US"        "5"

望ましい結果

"id"    "type"  "parent"    "country"   "totals"
"3"     "1"     "1"         "US"        "17" ->6+6+5=17
"4"     "2"     "3"         "US"        "6"
"5"     "3"     "3"         "US"        "5"

私は試していました(そして失敗しました)

UPDATE  likesd a
        INNER JOIN (
        SELECT  parent, sum(totals) totalsNew
        FROM likesd
        WHERE b.parent = a.id 
        GROUP BY parent
        ) b ON a.id = b.parent
        SET a.totals = b.totalsNew;
4

4 に答える 4

1

ここにあなたが望むことをするコマンドがあります

update likesd as upTbl
        inner join
    (select 
        tbl.id, tbl.totals + sum(tbl2.totals) as totals
    from
        likesd tbl
    inner join likesd tbl2 ON tbl2.parent = tbl.id
    where
        tbl.type = 1
    group by tbl.id) as results ON upTbl.id = results.id 
set 
    upTbl.totals = results.totals;

MySql 5.5でテスト済み

于 2013-09-27T20:32:31.593 に答える
0
update likesd
set totals = (
        select a.childTotals
        from (
            select sum(totals) as childTotals
            from likesd
        ) as a
    )
where id = parent and type = 1;

編集: MySQL Error 1093 - Can't specify target table for update in FROM clauseに従って、暗黙的な一時テーブルを使用して、ネストされた SELECT ステートメントで使用される同じテーブルへの更新を許可します。

于 2013-09-27T19:29:55.220 に答える
0

次のクエリを試してください。

with update_cte(parent,totals)
as(select parent, sum(totals)totalsNew
FROM likesd where type=1 group by parent)
update a
set a.totals=b.totals
from likesd a join update_cte b on a.id=b.parent
于 2013-09-27T19:27:44.993 に答える