![]() |
Datenbank: Paradox • Version: 1 • Zugriff über: DB-Explorer oder Delphi7-Programmierung
SQL: JOIN und UPDATE
Hallo,
in Access habe ich eine Aktualisierungsabfrage zusammengebastelt - in Delphi bzw. im SQL-Fenster des SQL-Explorers (Delphi 7) klappt das nicht: UPDATE [Auftragpos Paradox] INNER JOIN [Z2_Rabatte pro Hauptposition] ON ([Auftragpos Paradox].pos_h = [Z2_Rabatte pro Hauptposition].pos_h) AND ([Auftragpos Paradox].Auftrnum = [Z2_Rabatte pro Hauptposition].Auftrnum) SET [Auftragpos Paradox].RABATTSATZ = [Z2_Rabatte pro Hauptposition].[RABATTSATZ]; Erklärung: 1. Tabelle heißt Auftragpos und hat mehr Datensätze als die 2. Tabelle Rabatte Beide Tabellen haben das Feld "RABATTSATZ" Nun sollen die Werte von Tabelle Rabatte in das identische Feld der Tabelle Auftragpos kopiert werden. Bedingung: Auftragsnummer (Auftrnum) und Hauptposition (pos_h) sind identisch. Ein Artikel ist unter "SQL: Update aus zweiter Liste" vorhanden. Aber der löst das Problem nicht. Nach dem Lösungsvorschlag hieße meine Syntax: UPDATE 'Auftragpos.db' as a LEFT OUTER JOIN 'Rabatte.db' as o ON a.pos_h = o.pos_h AND a.Auftrnum = o.Auftrnum SET a.RABATTSATZ = o.RABATTSATZ Fehlermeldung des SQL-Explorers: Invalid use of keyword, Token: LEFT !? Vielleicht kennt ja jemand noch einen einfacheren Weg, z. B. mit Batch-Move oder Masterfield. Jedenfalls müssen die Werte am Schluss in der Tabelle Auftragpos verfügbar sein. vg Thomas |
Re: SQL: JOIN und UPDATE
Es fehlt das select. Versuch mal
SQL-Code:
UPDATE [Auftragpos Paradox] SELECT JOIN [Z2_Rabatte pro Hauptposition] ON ([Auftragpos Paradox].pos_h = [Z2_Rabatte pro Hauptposition].pos_h) AND ([Auftragpos Paradox].Auftrnum = [Z2_Rabatte pro Hauptposition].Auftrnum) SET [Auftragpos Paradox].RABATTSATZ = [Z2_Rabatte pro Hauptposition].[RABATTSATZ];
|
Re: SQL: JOIN und UPDATE
Bei einem UPDATE-Befehl brauche ich doch kein SELECT.
Auf den Delphi-Pages habe ich noch die Lösung gefunden: update 'Auftragpos.db' a, 'Rabatte.db' o set a.RABATTSATZ = o.RABATTSATZ where a.pos_h = o.pos_h AND a.Auftrnum = o.Auftrnum Aber da meldet der SQL-Explorer: Token , Er mag das KOmma zwischen den beiden Tabellen nicht. |
Re: SQL: JOIN und UPDATE
Zitat:
SQL-Code:
bzw.
update a set F2=b.F2 FROM TabelleA a
INNER JOIN TabelleB b ON a.F1=b.F1
SQL-Code:
Diese sind aber nicht ANSI-konform und daher sehr spezifisch!
update TabelleA set F2=b.F2 FROM TabelleB b
WHERE TabelleA.F1=b.F1 Lt ANSI müsste es in etwa so gehen:
SQL-Code:
update TabelleA set F2=(select F2 from TabelleB b where b.F1=TabelleA.F1)
|
Re: SQL: JOIN und UPDATE
Diverse DBMS unterstützen solche Updates. Aber wie sprechen hier von Paradox und BDE. Es würde mich mehr als wundern wenn sowas hier unterstützt wird.
|
Re: SQL: JOIN und UPDATE
... meine ich auch fast,
bei den letzten Vorschlägen kommt nämlich die Fehlermeldung Fehler bei FROM und "Single row subquery produced more than one row." Gibt's denn eine andere Lösung für das Problem? |
Re: SQL: JOIN und UPDATE
Zitat:
|
Re: SQL: JOIN und UPDATE
Danke - schön umständlich, aber immerhin eine Lösung.
vg Thomas |
Re: SQL: JOIN und UPDATE
Zitat:
|
Re: SQL: JOIN und UPDATE
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz