含两个INNER JOIN的MariaDB UPDATE语句报1064错,请求排查
MariaDB UPDATE JOIN语句的语法错误排查
核心问题与错误点
- 语法结构不符合MariaDB规范:MariaDB/MySQL不支持
UPDATE ... SET ... FROM ...这种写法(这是SQL Server的语法),正确的UPDATE JOIN格式是UPDATE 主表 JOIN 关联表1 ON ... JOIN 关联表2 ON ... SET ... WHERE ...。 - 表名/字段拼写错误:
- 第二个JOIN的关联条件里,
icdcodes.REF_SOLVINGMETHOD应为icdtencodes.REF_SOLVINGMETHOD(前面定义的关联表是icdtencodes,不是icdcodes); solvingmethods.ICD.ROWID存在语法错误,应该是solvingmethods.ICD_ROWID(多了一个不必要的点)。
- 第二个JOIN的关联条件里,
- 未定义的表别名:WHERE子句中的
d.ICD_FIX_REVISION里的d从未被定义,推测是icdtencodes.ICD_FIX_REVISION的笔误。 - 括号不匹配:WHERE子句中
(solvingmethods.SOLVINGMETHOD LIKE 'R' OR solvingmethods.SOLVINGMETHOD LIKE 'K'缺少闭合括号,导致语法结构断裂。
修正后的语句
UPDATE problems JOIN icdtencodes ON problems.REF_ICDTENCODE = icdtencodes.ICD_ROWID JOIN solvingmethods ON icdtencodes.REF_SOLVINGMETHOD = solvingmethods.ICD_ROWID SET problems.PROBLEM = CONCAT('XX', problems.PROBLEM) WHERE (solvingmethods.SOLVINGMETHOD LIKE 'R' OR solvingmethods.SOLVINGMETHOD LIKE 'K') AND icdtencodes.ICD_FIX_REVISION = '';
(注:LIKE ''等价于='',用等号更高效,若需要模糊匹配可保留LIKE)
内容的提问来源于stack exchange,提问作者LukaWiedieHomepage
相关产品推荐
相关产品推荐

