AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Update

Offene Frage von "Tau"
Ein Thema von Tau · begonnen am 25. Aug 2007 · letzter Beitrag vom 27. Aug 2007
Antwort Antwort
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#1

SQL Update

  Alt 25. Aug 2007, 19:29
Datenbank: MYSQL • Version: 5 • Zugriff über: HeidiSQL
Hallo zusammen

der Select befehl liefert mir dir richtigen Daten wenn ich ihn alleine ausführe aber im zusammen hang mit dem Update haut das ganze nicht richtig hin.

SQL-Code:
UPDATE (SELECT adressdaten.id AS adressdaten_id,
                  ort.id AS ort_id,
                  ort.plz AS ort_plz,
                  ort.ort AS ort_ort,
                  ort.land_id AS ort_land_id,
                  land.land AS land_land,
                  land.id AS land_id
                  FROM adressdaten LEFT OUTER JOIN ort ON adressdaten.ort = ort.id
                                    LEFT OUTER JOIN land ON adressdaten.land = land.id Where land.id = 6 GROUP BY ort.plz) SET ort.land_id = 6
Vielleicht hat jemand eine Tipp für mich wie ich das ganze umbauen kann so das es funktioniert.


Tau
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: SQL Update

  Alt 25. Aug 2007, 21:47
Evtl so:

SQL-Code:
UPDATE ort
SET ort.land_id = 6
where ort.id in
(SELECT ort.id FROM adressdaten LEFT OUTER JOIN ort ON adressdaten.ort = ort.id
                                  LEFT OUTER JOIN land ON adressdaten.land = land.id Where land.id = 6 GROUP BY ort.plz)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: SQL Update

  Alt 26. Aug 2007, 06:52
Hallo Bernhard

danke für die schnelle Antwort. Leider bekomme ich immer noch die folgende Fehlermeldung

SQL Error: You can´t specify target table 'ort' for update in FROM clause

der Select befehl alleine funktioniert aber.



Tau
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: SQL Update

  Alt 26. Aug 2007, 09:59
Hallo Tau,

du hast deine Tabellen nicht korrekt normalisiert und jetzt versuchst du die abweichenden Länderzuordnungen in den Adressdaten und deiner Ortetabelle auf der Basis der Adressdaten zu synchronisieren. Das wirst du wegen der fehlenden Normalisierung wahrscheinlich immer wieder tun müssen.

So sehen deine Tabellen momentan aus:

adressdaten (id, ort, land, ...)
land (id, land, ...)
ort (id, plz, ort, land_id, ...)

Offensichtlich glaubst du den Adressdaten mehr als der Ortetabelle, also müsstest du konsequenterweise den Fremdschlüssel LAND_ID aus der Tabelle ORT entfernen.

Deine Synchronisierung funktioniert so:

SQL-Code:
update ort
set land_id = (select land from adressdaten where ort.id = ort)
where id in (select ort from adressdaten)
Warum du die Fehlerbehebung auf den Länderschlüssel 6 beschränken möchtest verstehe ich nicht.

Noch ein Tipp: Wenn du dein Datenmodell aus einem E/R-Modell ableitest, dann werden aus den Entitäten ORT, ADRESSE und LAND (Singular) die Tabellen ORTE, ADRESSEN und LAENDER (Plural). Vorteilhaft ist dann noch eine Namenskonvention für Fremdschlüssel. Ich verwende da die Form TABLE_ID. In deinem Datenmodell findet man ORT.ORT als Ortsname, bei mir würde das Attribut NAME der Entität ORT zum Feld NAME der Tabelle ORTE. Dein Datenmodell sähe bei mir dann so aus:

adressen (id, orte_id, laender_id, ...)
laender (id, name, ...)
orte (id, plz, name, ...)

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5

Re: SQL Update

  Alt 27. Aug 2007, 08:01
Zitat von marabu:
... Dein Datenmodell sähe bei mir dann so aus:

adressen (id, orte_id, laender_id, ...)
land (id, name, ...)
ort (id, plz, name, ...)

Grüße vom marabu
Da es ja
a) Orte mit mehreren PLZ
b) Den selben Ortsnamen in verschieden Ländern gibt

könnte man das noch mehr aufteilen:

laender (id, name, ...)
orte (id, name, ....)
postleitzahlen (id, laender_id, plz, ...)

ort_plz (id, orte_id, postleitzahlen_id)

adressen (id, ort_plz_id , ....)

Oder denke ich um diese Zeit noch falsch?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: SQL Update

  Alt 27. Aug 2007, 09:17
Hallo Stephan,

nicht zu vergessen, dass es Orte in Deutschland gibt, welche sich eine Postleitzahl teilen. Ich stimme dir zu, dass man noch einiges am Datenmodell ändern könnte - wenn man denn die konkreten Anforderungen kennen würde.

Es gibt hier übrigens zwei Extreme: Länderkennung, Postleitzahl, Orts- und Straßenname direkt eintragen lassen oder Auswahllisten gemäß dem Datenmodell der deutschen Post hinterlegen (bei dem Straßenname, Postfach oder Kundenname die Postleitzahl bestimmen). Im ersten Fall hat man eigentlich die wenigsten Probleme, die Korrektur von Falschangaben muss der Kunde anstoßen, statistische Auswertungen bleiben möglich. Das zweite Extrem führt zu zwei unabhängigen Benutzerschnittstellen für Web und PC mit erhöhtem Entwicklungsaufwand.

Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:33 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