【问题标题】:Checking several tables when updating table更新表时检查多个表
【发布时间】:2021-10-11 07:45:34
【问题描述】:

我正在尝试创建一个脚本,如果 static.method_id = methods.method_id 和 if methods.mm_id =languages.mm_id 并且如果languages.is_default = 1,它将更新表静态中的 lang_id 列。但是这个不起作用,请告诉我,为什么?

UPDATE s
SET s.lang_id = IFNULL(l.lang_id,1)
FROM static as s
JOIN methods as m
ON m.method_id = s.method_id
JOIN languages as l
ON m.mm_id = l.mm_id AND l.is_default = 1

更新。我正在使用 MySQL 出现错误

'FROM merchants__payment_methods_static as s
JOIN merchants__payment_methods as '

这就是 phpMyAdmin 告诉我的

【问题讨论】:

  • 此代码在 MySQL 中不起作用。请标记您真正使用的数据库。另外,解释一下“不工作”是什么意思。如果遇到错误,请显示错误。
  • @GordonLinoff 完成!
  • 您的代码中的t 是什么?
  • @forpas 错字,对不起

标签: mysql sql sql-update left-join coalesce


【解决方案1】:

使用LEFT 加入:

UPDATE static s
LEFT JOIN methods m ON m.method_id = s.method_id
LEFT JOIN languages l ON m.mm_id = l.mm_id AND l.is_default
SET s.lang_id = COALESCE(l.lang_id, 1);

【讨论】:

    【解决方案2】:

    顺便说一句,在 MySQL 中,以下语法是正确的:

    UPDATE static as s
    JOIN methods as m
    ON m.method_id = s.method_id
    JOIN languages as l
    ON m.mm_id = l.mm_id AND l.is_default = 1
    SET s.lang_id = COALESCE(t.lang_id,1);
    

    【讨论】:

    • 感谢您的回答,但如果未找到 l.is_default,它不会将 lang_id 中的 0 更改为 1
    • 可能,你想要一个 LEFT JOIN(虽然我只做两次更新)
    猜你喜欢
    • 2010-11-23
    • 1970-01-01
    • 2017-05-17
    • 2016-02-17
    • 2010-11-26
    • 1970-01-01
    • 2014-01-29
    • 2020-08-22
    • 2021-01-15
    相关资源
    最近更新 更多