2013-12-16 42 views
1

我希望你能再次幫助我,謝謝已經指出我正確的方向,爲德國的新IBAN創建校驗碼。我現在試圖用新計算的BIC和IBAN更新我們的會員數據庫,但似乎在MariaDB MySQL數據庫上的UPDATE語句有問題,儘管我認爲我的語法正確。MariaDB更新錯誤內部加入並選擇

我所要做的就是在SELECT語句的表「mitglieder」中設置兩個字段「konto_bic」和「konto_iban」,該語句創建一個名爲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` 

這也沒有得到我任何進一步的(從DB錯誤)。

任何人都可以看到我的語法錯誤可能是什麼? 預先感謝您的幫助

斯蒂芬

+0

你能告訴我們錯誤嗎? –

回答

2

嘗試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

它也適用於我,但與更新「測試」AS「a」 – Genjo