Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Update mit Werten aus der gleichen Tabelle und anderen Tabellen (https://www.delphipraxis.net/201528-update-mit-werten-aus-der-gleichen-tabelle-und-anderen-tabellen.html)

Ykcim 29. Jul 2019 16:47

Datenbank: MySQL • Version: 5 • Zugriff über: UniDac

Update mit Werten aus der gleichen Tabelle und anderen Tabellen
 
Hallo Zusammen,

ich möchte ein Update machen, bei dem ich die Daten einer Tabelle und die anderer Tabellen zusammenführe.

In der Tabelle AS400 möchte ich das Feld OAAGBZ bei den Datensätzen, wo das Feld OAMANR like 'SU%' erfüllt ist mit folgendem Inhalt füllen:
Delphi-Quellcode:
select concat(a.oaagbz,' HN.',Right(p.stkomp,3),' ', t.azabme) from as400 a
left join phstru p on p.stbgnr=a.watenr and p.tamagr=3500
left join teilestamm t on t.aztenr=p.stkomp
where    a.oamanr like 'SU%'
and t.temagr=3500
and p.tamagr=3500
group by a.watenr
Dazu habe ich versucht ein Update-Statement zu schreiben, aber das bekomme ich nicht ans Laufen:
Delphi-Quellcode:
update as400 as b
left join (select concat(a.oaagbz,' HN.',Right(p.stkomp,3),' ', t.azabme) as Bezeichnung from as400 a
    left join phstru p on p.stbgnr=a.watenr and p.tamagr=3500
    left join teilestamm t on t.aztenr=p.stkomp
    where    a.oamanr like 'SU%'
    and t.temagr=3500
    and p.tamagr=3500
    group by a.watenr) as t
set b.oaagbz=t.Bezeichnung
where b.waaunr=t.waaunr and b.waaupo=t.waaupo and b.oaagnr=t.oaagnr
Fehlermeldung lautet:
Delphi-Quellcode:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set b.oaagbz=t.Bezeichnung
where b.waaunr=t.waaunr and b.waaupo=t.waaupo and b.' at line 9
Aber ich habe den Eindruck, dass ich einen grundsätzlichen Denkfehler habe...

Kann mir jemand helfen?

Vielen Dank
Patrick

mkinzler 29. Jul 2019 16:50

AW: Update mit Werten aus der gleichen Tabelle und anderen Tabellen
 
Man kann keinen Join updaten. Aber eine Tabelle mit Werten aus einem Join.

SQL-Code:
update
  as400 b
set
  b.oaagbz=t.Bezeichnung from ( <Join>) t
where ...

Ykcim 29. Jul 2019 17:09

AW: Update mit Werten aus der gleichen Tabelle und anderen Tabellen
 
Ok, ich habe es jetzt so versucht:
Delphi-Quellcode:
update as400 as b
set b.oaagbz=t.Bezeichnung from
    (select concat(a.oaagbz,' HN.',Right(p.stkomp,3),' ', t.azabme) as Bezeichnung from as400 a
      left join phstru p on p.stbgnr=a.watenr and p.tamagr=3500
      left join teilestamm t on t.aztenr=p.stkomp
      where a.oamanr like 'SU%'
      and t.temagr=3500
      and p.tamagr=3500
     group by a.watenr) as t
where b.waaunr=t.waaunr and b.waaupo=t.waaupo and b.oaagnr=t.oaagnr
Aber da gefällt ihm auch noch etwas nicht:
Delphi-Quellcode:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from
(select concat(a.oaagbz,' HN.',Right(p.stkomp,3),' ', t.azabme) as Bezeich' at line 2

hoika 29. Jul 2019 17:47

AW: Update mit Werten aus der gleichen Tabelle und anderen Tabellen
 
Hallo,
läuft denn das Select alleine?

as t
where b.waaunr=t.waaunr and b.waaupo=t.waaupo and b.oaagnr=t.oaagnr

Ich denke, dass geht nicht.

Delphi.Narium 30. Jul 2019 06:34

AW: Update mit Werten aus der gleichen Tabelle und anderen Tabellen
 
Da was brauchbares bei? https://stackoverflow.com/questions/...n-select-query

Ykcim 30. Jul 2019 08:52

AW: Update mit Werten aus der gleichen Tabelle und anderen Tabellen
 
Vielen Dank für die Hilfe!

Ich habe die Query jetzt so aufgebaut:
Delphi-Quellcode:
UPDATE
    `table1` AS `dest`,
    (
        SELECT
            *
        FROM
            `table2`
        WHERE
            `id` = x
    ) AS `src`
SET
    `dest`.`col1` = `src`.`col1`
WHERE
    `dest`.`id` = x
;
So hat es jetzt funktioniert:
Delphi-Quellcode:
update as400 as b,
  (select a.waaunr, a.waaupo, a.oaagnr, concat(a.oaagbz,' ', t.tebez1) as Bezeichnung from as400 a
      left join phstru p on p.stbgnr=a.watenr and p.tamagr=3500
      left join teilestamm t on t.aztenr=p.stkomp
   where a.oamanr like 'SU%'
   and t.temagr=3500
   and p.tamagr=3500) as t
set b.oaagbz=t.Bezeichnung
where b.waaunr=t.waaunr and b.waaupo=t.waaupo and b.oaagnr=t.oaagnr
Vielen Dank
Patrick


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf