MariaDB 更新错误内部连接和选择

Posted

技术标签:

【中文标题】MariaDB 更新错误内部连接和选择【英文标题】:MariaDB update error inner join and select 【发布时间】:2014-01-03 16:43:11 【问题描述】:

希望您能再次帮助我,感谢您为德国新的 IBAN 创建校验码指明了正确的方向。我现在正在尝试使用新计算的 BIC 和 IBAN 更新我们的会员数据库,但似乎在 MariaDB mysql 数据库上的 UPDATE 语句存在问题,尽管我认为我的语法是正确的。

我要做的就是在 SELECT 语句中设置表“mitglieder”中的两个字段“konto_bic”和“konto_iban”,该语句创建一个名为 b 的临时表,其中包含“id”、“bic”和“伊班”。两个表中的“id”相同。

这是我的第一次尝试:

update a
set a.`konto_bic` = b.`BIC`, a.`konto_iban` = b.`IBAN`
from `mitglieder` a
INNER JOIN (SELECT m.`id`, m.`nachname`, m.`vorname`, m.`konto_bank`, m.`konto_blz`, m.`konto_nummer`, k.`bic` AS 'BIC', CONCAT('DE',LPAD(98-MOD(CONVERT(CONCAT(m.`konto_blz`,LPAD(m.`konto_nummer`,10,'0'),'1314','00'), decimal(24)),97),2,'0'),m.`konto_blz`,LPAD(m.`konto_nummer`,10,'0')) AS 'IBAN'
FROM `mitglieder` m
LEFT JOIN `konvert_bic_blz` k
ON m.`konto_blz` = k.`blz`
ORDER BY m.`nachname`, m.`vorname`) b
ON a.`id` = b.`id`

但是,这产生了一个错误,我尝试了这个:

update `mitglieder` a
set a.`konto_bic` = b.`bic`, a.`konto_iban` = b.`iban`
FROM (SELECT m.`id` as 'id', k.`bic` as 'bic', CONCAT('DE',LPAD(98-MOD(CONVERT(CONCAT(m.`konto_blz`,LPAD(m.`konto_nummer`,10,'0'),'1314','00'), decimal(24)),97),2,'0'),m.`konto_blz`,LPAD(m.`konto_nummer`,10,'0')) AS 'iban'
FROM `mitglieder` m
LEFT JOIN `konvert_bic_blz` k
ON m.`konto_blz` = k.`blz`) b
WHERE a.`id` = b.`id`

这也没有让我进一步了解(来自 DB 的错误)。

谁能看到我的语法错误可能是什么? 提前感谢您的帮助

斯蒂芬

【问题讨论】:

你能告诉我们错误吗? 【参考方案1】:

试试下面的 SQL

UPDATE `mitglieder` a,
       (SELECT m.`id` AS 'id',
               k.`bic` AS 'bic',
               CONCAT('DE',LPAD(98-MOD(CONVERT(CONCAT(m.`konto_blz`,LPAD(m.`konto_nummer`,10,'0'),'1314','00'), decimal(24)),97),2,'0'),m.`konto_blz`,LPAD(m.`konto_nummer`,10,'0')) AS 'iban'
        FROM `mitglieder` m
        LEFT JOIN `konvert_bic_blz` k ON m.`konto_blz` = k.`blz`) b
SET a.`konto_bic` = b.`bic`, a.`konto_iban` = b.`iban`
WHERE a.`id` = b.`id`

更新语法

http://dev.mysql.com/doc/refman/5.0/en/update.html

【讨论】:

【参考方案2】:

我在 MariaDB 10.2.6 上试过这个:

SET sql_mode = 'ANSI_QUOTES'

UPDATE "test"."user" AS "a"
INNER JOIN "test"."user_profile" AS "c" ON "c".user_id = "a".id
INNER JOIN "test"."profile" AS "d" ON "d".id = "c".profile_id
SET "a".firstname = 'laurent'
WHERE "a".id = 3;

它有效:)

【讨论】:

以上是关于MariaDB 更新错误内部连接和选择的主要内容,如果未能解决你的问题,请参考以下文章

mariadb集群与nginx负载均衡配置--centos7版本

MariaDB安装

Mariadb安装和简析

centos7使用yum安装mysql5.6版本

mariadb10.4

CentOS mariadb