programing

MariaDB 업데이트 오류 내부 조인 및 선택

goodsources 2022. 9. 6. 22:36
반응형

MariaDB 업데이트 오류 내부 조인 및 선택

독일에서 새로운 IBAN 체크 디지트를 작성하기 위해 올바른 방향을 알려주셔서 다시 한번 도와주시면 감사하겠습니다.이번에 새롭게 계산된 BIC와 IBAN으로 멤버십 데이터베이스를 업데이트하려고 하는데, 구문은 맞다고 생각되는데 MariaDB MySQL 데이터베이스의 UPDATE 문장에 문제가 있는 것 같습니다.

이 경우 SELECT 문에서 테이블 내의 "konto_bic" 및 "konto_iban" 두 개의 필드를 설정하고 "id", "bic", "iban" 열을 가진 b라는 임시 테이블을 작성합니다.두 테이블에서 "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로부터의 에러).

내 구문 오류가 뭔지 아는 사람 있나요?잘 부탁드립니다.

스테판

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

이것은 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;

효과가 있습니다:)

언급URL : https://stackoverflow.com/questions/20608428/mariadb-update-error-inner-join-and-select

반응형