SQL: UPDATE mit JOIN (MySql/Maria, auch in AIS)
Autor: Ralf v.d.Mark
eingetragen: Freitag, 18. Juni 2021 um 11:58 Uhr (24/2021 Kalenderwoche)
geändert: Donnerstag, 15. Dezember 2022 um 14:02 Uhr (50/2022 Kalenderwoche)
Keywords: Update Join verknüpfung mysql mariadb
Kategorien: DB: MySQL, DB: MariaDB,
Text:
Query 1: Zeigt alle zu verändernden Datensätze.
Query 2: Verändert diese Datensätze
s. auch UPDATE mit JOIN für "PostgreSQL"
s. Stackoverflow: SQL - Update mit Join
s. auch Artikel "GROUP_CONCAT(), auch im UPDATE mit JOIN"
Quellcode:
-- MySQL/MariaDB:
SELECT nk.`kat_id`, nk.`nummer`, k.`kat_name`, nk.`nummer`, n.`titel`
FROM `nr2kat` nk
LEFT JOIN `kategorie` k ON (k.`kat_id` = nk.`kat_id`)
LEFT JOIN `nr` n ON (n.`nummer` = nk.`nummer`)
WHERE nk.`kat_id` IN (31, 29)
AND n.titel LIKE "%pfeil%";
-- MySQL/MariaDB:
UPDATE `nr2kat` nk
LEFT JOIN `kategorie` k ON (k.`kat_id` = nk.`kat_id`)
LEFT JOIN `nr` n ON (n.`nummer` = nk.`nummer`)
SET nk.`kat_id` = 37
WHERE nk.`kat_id` IN (31, 29)
AND n.titel LIKE "%pfeil%";
-- => AIS: Auftragnehmer korrigieren!
-- Schreibt in das Feld "ais_auftraege.auftrags_an_id" den Wert aus
-- "ais_mitwirk_einrtg.ipa_ober_einrchtg_id", wenn der Eintrag
-- in Tabelle "ais_mitwirk_einrtg" als Federführend gesetzt
-- wurde (mitwirk_einrtg_federfuehrend = 1).
UPDATE ais_auftraege auftr
JOIN ais_mitwirk_einrtg mitw ON
(mitw.auftrags_id = auftr.auftrags_id
AND mitw.mitwirk_einrtg_federfuehrend = 1)
SET auftr.auftrags_an_id = mitw.ipa_ober_einrchtg_id,
auftr.auftrags_update = auftr.auftrags_update
WHERE auftr.auftrags_an_id != mitw.ipa_ober_einrchtg_id;