【问题标题】:How to fix join error in mysql update query如何修复mysql更新查询中的连接错误
【发布时间】:2020-05-22 09:18:10
【问题描述】:

我在 mysql 中有一个错误,如图所示。请帮帮我

sql代码如下:

UPDATE
  tbl_users AS Users
SET
  Users.money_current = Users.money_current +
  CASE
    WHEN TempTbl.money_info IS NULL
    THEN 0
    ELSE TempTbl.money_info
  END
  LEFT JOIN
    (SELECT
      userId,
      SUM(bet_money * bet_rate) AS money_info
    FROM
      tbl_betting
    WHERE ROUND = 'xxx'
      AND is_win = 1
    GROUP BY userId) AS TempTbl
    ON Users.userId = TempTbl.userId
   FROM tbl_users AS Users;

【问题讨论】:

  • JOIN 必须在 SET 之前。
  • 查看多表语法:这里dev.mysql.com/doc/refman/8.0/en/update.html
  • 请将您的代码发布为文本,而不是图像。
  • 更新 tbl_users 作为用户 SET Users.money_current = Users.money_current + CASE WHEN TempTbl.money_info 为 NULL THEN 0 ELSE TempTbl.money_info END LEFT JOIN (SELECT userId, SUM(bet_money * bet_rate) AS money_info FROM tbl_betting WHERE ROUND = '965802' AND is_win = 1 GROUP BY userId) AS TempTbl ON Users.userId = TempTbl.userId FROM tbl_users AS Users;

标签: mysql join syntax sql-update


【解决方案1】:

这是正确的语法:

UPDATE tbl_users AS Users 
LEFT JOIN (
  SELECT userId, SUM(bet_money * bet_rate) AS money_info 
  FROM tbl_betting WHERE ROUND = '965802' AND is_win = 1 
  GROUP BY userId
) AS TempTbl ON Users.userId = TempTbl.userId
SET Users.money_current = Users.money_current + COALESCE(TempTbl.money_info, 0)

我还将 CASE 表达式更改为 COALESCE()
但我认为INNER JOIN 也适用于您的情况,因为您使用的LEFT JOIN 的不匹配行不会更改money_current 的值。

【讨论】:

  • 优秀。你是 mysql 查询方面的专家。感谢感谢。
猜你喜欢
  • 2017-12-15
  • 2018-03-31
  • 2015-12-30
  • 1970-01-01
  • 2011-01-11
  • 2011-12-24
  • 2013-02-22
  • 1970-01-01
  • 2015-10-26
相关资源
最近更新 更多