【问题标题】:Nested update in select选择中的嵌套更新
【发布时间】:2014-05-17 00:22:18
【问题描述】:

我正在执行

SELECT id as uid, (
    UPDATE trans SET paidout=1
        WHERE user_id=uid AND SUM(amount)>0.5234
)
FROM accounts

但是没有成功,为什么这不起作用?

【问题讨论】:

  • 你想达到什么目的?
  • 这毫无意义。请说明您要达到的目标。

标签: mysql


【解决方案1】:

您可以使用子查询首先接收来自trans 的所有user_id,其中amount 的总和大于0.5234。然后使用INNER JOIN 匹配UPDATE trans 语句和SET paidout = 1 中的所有这些user_id 值。

没有必要涉及accounts 表。

UPDATE trans
    INNER JOIN (
        SELECT user_id
            FROM trans
            GROUP BY user_id
            HAVING SUM(amount) > 0.5234
    ) AS users
    ON trans.user_id = users.user_id
    SET paidout = 1;

演示@SQL Fiddle

【讨论】:

    【解决方案2】:

    你使用了错误的语法,你可以在更新查询中使用 select 作为子查询,但是在 select 查询中你不能做更新子查询,如果你想从 trans 表中更新 paidout 场景 user_id 与accounts 表中的 id 和用户金额的总和应该大于 0.5234 可以这样做

    UPDATE trans t
    JOIN accounts  ON(t.user_id = a.id)
    JOIN 
    (SELECT user_id FROM trans GROUP BY user_id HAVING SUM(amount) > 0.5234 ) tt
    ON(tt.user_id = a.id)
    GROUP BY a.id
    SET t.paidout=1 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 2019-09-25
      • 1970-01-01
      • 2018-10-21
      • 1970-01-01
      相关资源
      最近更新 更多