-
SQL V5R4 update
Hallo *all,
in bin ja jetzt hingegangen und habe die Emial-Datei bereinigt das jede ID nur einmal vorhanden ist. Kann ich auch fehlerfrei per sql insert reinstellen.
jetzt möchte ich in der selben Konstellation ein update laufen lassen. Muß ja später immer wieder passieren.
Code:
Ergebnis der Anweisung enthält mehr als eine Zeile.
update adr04xx t1 set t1.a4mail = (select E_MAI00001 from
email3 t2 where t1.a4kto = t2.KD_NR00001)
where t1.a4edua = 'XX'
and a4fa = 1
and a4sts = 0
and a4abkz = 0
Wie schon gesagt, in der E-Mail ist nur Kunden-Nr und E-Mail Adresse.
In der anderen Datei ist die Kunden-Nummer mit dem Schlüssel XX eindeutig.
Ich habe die Daten mal in Excel übernommen und sehe dort auch keine doppeleten Werte.
Die Fehlerbeschreibung hilft mir nicht weiter.
Code:
Nachrichten-ID . . . . : SQL0811 Bewertung . . . . . . : 30
Nachrichtenart . . . . : Diagnose
Nachricht . . . : Ergebnis der Anweisung enthält mehr als eine Zeile.
Ursache . . . . : Die Ergebnistabelle einer Anweisung SELECT INTO, einer
Unterabfrage oder einer Unterauswahl einer Anweisung SET enthält mehr als
eine Zeile. Es handelt sich um Fehlerart 2. Bei Fehlerart 1 wurde von einer
Anweisung SELECT INTO versucht, mehr als eine Zeile zurückzugeben. Bei
Fehlerart 2 wurde durch eine Unterauswahl eines Basisprädikats mehr als eine
Zeile erstellt. Es ist nur eine Zeile zulässig.
Für Hinweise dankbar.
GG
-
Bei einem Update über meherere Tabellen muss sicher gestellt werden, dass es für jede Zeile die geändert werden soll genau eine Zeile in der zweiten Tabelle bzw. in dem SELECT-Statement vorhanden ist.
Die korrekte Syntax für den Update über meherere Tabellen sieht wie folgt aus:
Code:
update MyTable2 A
set (A.Feld1, A.Feld2) = (select Distinct B.Feld1, B.Feld2
from Mytable1 B
where A.Key1 = B.Key1
and A.Key2 = B.Key2)
where exists (select C.Key1, C.Key2
from MyTable1 C
where A.Key1 = C.Key1
and A.Key2 = C.Key2)
Birgitta
-
... der distinct heilt da nix (beides knallt, wenn das nicht eindeutig ist. Eigentlich müsste fetch first row only gehen (habe ich aber nicht ausprobiert, bei mir gibt es immer primary keys und stimmende key Beziehungen).
Ansonste macht man erst den update mit where exists, dann den insert mit where not exists (damit man nix unnötig doppelt macht).
D*B
-
mit
select E_MAI00001, count(*) from
email3 group by E_MAI00001
having count(*) > 1
findest du die doppelten
Robi
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Danke das wars,
ich hatte in der email3 -Datei (keylose-Datei) wohl aus versehen den Import wohl 2 mal gemacht.
Es ist schon blöd wenn man alleine arbeitet, und man mit keinem diskutieren kann welche Schritte man gemacht hat. In der Regel kommt man beim erzählen schon selber drauf wo der Fehler ist.
Bei Gelegenheit werde ich mir meine Katze ins Büro holen, die hört zumindestens immer interessiert zu und sagt ab und zu auch miau (Meisten bei der Frage hast Du Hunger)
GG
-
@Dieter,
mein Beispiel funktioniert unter der Prämisse, dass komplett doppelte Sätze oder zumindest doppelte Sätze in denen die upzudatenden Felder bei gleichem Schlüssel die gleichen Werte beinhalten vorhanden sein können.
Sofern doppelte Schlüssel mit unterschiedlichen Werten in den übrigen Spalten vorhanden sind ist eh' Hopfen und Malz (sorry Ronald!) verloren, welcher Wert ist denn nun der richtige und welchen Wert soll er denn übernehmen?
Ob das Hinzufügen von FETCH FIRST ROW ONLY dann die Ideallösung ist, bei der gnadenlos der erste Satz mit den Schlüssel-Werten genommen wird, wage ich denn doch zu bezweifeln.
Insbesondere da der "erste" Satz abhängig von dem Zugriffsweg, den sich der Optimizer ausgesucht hat, bestimmt ist.
Birgitta
-
... die Katze hätte hier wohl geholfen, jedenfalls ist klar, was sie auf die Frage: "Wie findest Du diese Lösung?" gesagt hätte: "Mau!".
D*B
Similar Threads
-
By KingofKning in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 10-10-14, 08:13
-
By KingofKning in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 03-10-14, 11:37
-
By KingofKning in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 19-08-14, 13:29
-
By KingofKning in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 25-07-14, 15:45
-
By dino in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 18-12-13, 13:59
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