-
SQL Statement
Hallo,
benötige Hilfe bei einem SQL Statement.
Ich möchte ein Feld aus DateiA mit einem Feld aus DateiB updaten, Schlüssel ist FeldXY aus DateiA.
Danke!
Gruß,
Mädele
-
update DateiA set f1=(select f1 from DateiB where DateiA.Key = DateiB.Key and ...)
where DateiA.Key in (Select DateiB.Key from DateiB)
Liest sich kompliziert ist es aber nicht.
Der 1. Subselect selektiert genau ein Feld, dessen Schlüssel zu DateiA passt.
Ist jedoch kein passender Satz vorhanden, liefert der Select NULL. Ist NULL jedoch weder erlaubt, geschweige denn gewünscht, muss ich den Update per Where auf genau die vorhandenen Sätze einschränken.
-
Hallo,
habe das Statement ausgeführt und bekomme die Fehlermeldung -Ergebnis der Anweisung enthält mehr als eine Zeile-
update datei a set a.feld1=(select b.feld1 from datei b where a.key1 = b.key1) where a.key1 in (select b.key1 from datei b)
..mit where exists hab ich es auch schon versucht - gleiche Fehlermeldung.
Was mache ich falsch?
-
Im 1. Subselect darf nur 1 Zeile als Ergebnis kommen, d.h., dass der Key nicht eindeutig ist !
Für diese Form des Updates benötigst du eine EINDEUTIGE Beziehung um genau EINEN Satz zu selektieren.
Falls das Feld Key1 nicht ausreicht mußt du halt mit "and" weitere Schlüssel auswählen.
Frage: Ist dein Beispiel das richtige ? Es scheint, dass du den Update auf sich selbst durchführst.
-
Hallo,
ich verwende als eindeutigen Schlüssel die Teilenummer, welche in beiden Dateien vorhanden ist. Jede Teilenummer kommt nur einmal in den Dateien vor.
Grüße,
Mädele
[Dieser Beitrag wurde von Mädele am 27. Februar 2003 editiert.]
-
Um das zu überprüfen mach erst mal einen normalen select:
select rrn(a), a.feld1, a.key1, rrn(b), b.feld1, b.key1
from datei a, datei b
where a.key1=b.key1
Mit der Funktion RRN(x) wird die Satznummer der Datei ausgegeben. Wenn die Satznummer von (b) mehrmals auftaucht hast du ein Problem (nicht eindeutig).
Oder prüfe folgendes
select key1, count(*) from datei
group by key1
having count(*)>1
Damit bekommst du alle Schlüssel, die mehr als 1 Mal vorkommen.
-
Hallo,
Du hattest Recht - doch jetzt tut sich ein neues Problem auf.
Ich habe z.B. 2 Sätze des gleichen Schlüssels, möchte aber den aktuellsten Satz. Wie mache ich das mit SQL?
-
Den aktuellsten Satz kann man nur an Hand der Daten selbst feststellen, als z.B. Datum/Zeit, Timestamp oder Zähler.
Ab V5 kann man im Select die Anzahl Sätze bestimmen (vorher leider nicht):
select .... from datei a where key1=...
and Zeit = (select max(Zeit) from datei b where a.key1 = b.key1)
fetch first 1 row
Ob Fetch allerdings auch im subselect funktioniert, wage ich zu bezweifeln.
Wenn der zu selektierende Wert in allen doppelten Schlüsseln identisch ist, kannst du auch noch mit "SELECT DISTINCT ..." im Subselect arbeiten.
Ansonsten gehts halt nur noch per Programm !
Similar Threads
-
By Sony in forum IBM i Hauptforum
Antworten: 27
Letzter Beitrag: 20-07-09, 21:48
-
By FNeurieser in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 11-10-06, 14:53
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
-
By juergenkemeter in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 15-11-04, 12:15
-
By Pia in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 18-04-02, 15:24
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks