AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL: JOIN und UPDATE
Thema durchsuchen
Ansicht
Themen-Optionen

SQL: JOIN und UPDATE

Ein Thema von ts-d · begonnen am 31. Mär 2009 · letzter Beitrag vom 3. Apr 2009
Antwort Antwort
Seite 1 von 3  1 23      
ts-d

Registriert seit: 29. Apr 2008
31 Beiträge
 
#1

SQL: JOIN und UPDATE

  Alt 31. Mär 2009, 10:56
Datenbank: Paradox • Version: 1 • Zugriff über: DB-Explorer oder Delphi7-Programmierung
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: SQL: JOIN und UPDATE

  Alt 31. Mär 2009, 11:51
Es fehlt das select. Versuch mal
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];
Markus Kinzler
  Mit Zitat antworten Zitat
ts-d

Registriert seit: 29. Apr 2008
31 Beiträge
 
#3

Re: SQL: JOIN und UPDATE

  Alt 31. Mär 2009, 12:05
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.
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: SQL: JOIN und UPDATE

  Alt 31. Mär 2009, 12:16
Zitat von ts-d:
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.
Du darfst auch nur eine Tabelle updaten. Von MS SQL gibt es auch die erweiterte Syntax mit UPDATE FROM (unterstützt u.a. auch vom ADS).
SQL-Code:
update a set F2=b.F2 FROM TabelleA a
  INNER JOIN TabelleB b ON a.F1=b.F1
bzw.
SQL-Code:
update TabelleA set F2=b.F2 FROM TabelleB b
  WHERE TabelleA.F1=b.F1
Diese sind aber nicht ANSI-konform und daher sehr spezifisch!
Lt ANSI müsste es in etwa so gehen:
update TabelleA set F2=(select F2 from TabelleB b where b.F1=TabelleA.F1)
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: SQL: JOIN und UPDATE

  Alt 31. Mär 2009, 12:31
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
ts-d

Registriert seit: 29. Apr 2008
31 Beiträge
 
#6

Re: SQL: JOIN und UPDATE

  Alt 31. Mär 2009, 13:14
... 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?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: SQL: JOIN und UPDATE

  Alt 31. Mär 2009, 13:23
Zitat von ts-d:
Gibt's denn eine andere Lösung für das Problem?
Ja. "Händisches" Update. Lass dir alle Datensätze per SELECT geben und schreib dann einzelne Update-Statements oder geh mit einer TTable-Komponente und Find durch die Datensätze durch und aktualisiere sie so. Dauert zwar, aber bei so einer alten DB darf man froh sein das sie bei zu vielen aktionen nicht kaputt geht.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
ts-d

Registriert seit: 29. Apr 2008
31 Beiträge
 
#8

Re: SQL: JOIN und UPDATE

  Alt 31. Mär 2009, 13:28
Danke - schön umständlich, aber immerhin eine Lösung.

vg
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: SQL: JOIN und UPDATE

  Alt 31. Mär 2009, 15:21
Zitat von ts-d:
"Single row subquery produced more than one row."
Du hast mindestens eine Dublette drin! Damit kann keiner umgehen, denn es ist nicht klar, welcher Datensatz als Quelle herhalten soll.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#10

Re: SQL: JOIN und UPDATE

  Alt 31. Mär 2009, 17:01
Zitat von ts-d:
Danke - schön umständlich, aber immerhin eine Lösung.
BDE - Paradox kann es definitiv nicht anders. // Martin
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz