简体   繁体   English

MariaDB更新错误内连接并选择

[英]MariaDB update error inner join and select

I hope you can help me again, thanks already for pointing me to the right direction with creating the check digit for the new IBAN in Germany. 我希望你能再次帮助我,感谢我已经指出了正确的方向,为德国的新IBAN创建了校验位。 I am now trying to update our membership database with the newly calculated BIC and IBAN but seem to have a problem with the UPDATE statement on the MariaDB MySQL database, despite the fact that I think I got the syntax right. 我现在正尝试使用新计算的BIC和IBAN更新我们的成员资格数据库,但似乎在MariaDB MySQL数据库上的UPDATE语句有问题,尽管事实上我认为我的语法正确。

All I am trying to do is set the two fields "konto_bic" and "konto_iban" in the table "mitglieder" from the SELECT statement which creates a temporary table called b with the columns "id", "bic" and "iban". 我要做的就是在SELECT语句的表“mitglieder”中设置两个字段“konto_bic”和“konto_iban”,它创建一个名为b的临时表,其中包含列“id”,“bic”和“iban”。 The "id" is the same in the two tables. “id”在两个表中是相同的。

Here is my first try: 这是我的第一次尝试:

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`

However, this produced an error and I tried this instead: 但是,这产生了一个错误,我尝试了这个:

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`

That also did not get me any further (error from DB). 这也没有让我更进一步(DB的错误)。

Can anyone see what my syntax error might be? 任何人都可以看到我的语法错误可能是什么? Thank you in advance for your help 预先感谢您的帮助

Stephan 斯蒂芬

Try below SQL 试试下面的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`

UPDATE Syntax 更新语法

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

I tried this on MariaDB 10.2.6 : 我在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;

And it works :) 它的工作原理:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM