2013-12-16 2 views
1

Надеюсь, вы снова можете мне помочь, спасибо уже за то, что указали мне в правильном направлении, создав контрольную цифру для нового IBAN в Германии. Теперь я пытаюсь обновить нашу базу данных членства с недавно вычисленными BIC и IBAN, но, похоже, проблема с оператором UPDATE в базе данных MariaDB MySQL, несмотря на то, что я думаю, что получил правильный синтаксис.Ошибка внутренней коррекции MariaDB и выберите

Все, что я пытаюсь сделать, это установить два поля «konto_bic» и «konto_iban» в таблице «mitglieder» из инструкции SELECT, которая создает временную таблицу b с столбцами «id», «bic» и "IBAN". «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` 

Это также не получил мне никаких дальнейших (ошибка из БД).

Может ли кто-нибудь увидеть мою синтаксическую ошибку? Заранее спасибо за помощь

Stephan

+0

Не можете найти нам ошибку? –

ответ

2

Try ниже 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 Синтаксис

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

1

Я попробовал это на 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; 

И это работает :)

+0

Он работает тоже для меня, но с UPDATE "test" AS "a" – Genjo

Смежные вопросы