Oracle: aktualisieren Sie die Spalte mit Werten aus einer anderen Tabelle
Ich habe eine neue Spalte zu einer bestehenden Tabelle. Ich möchte füllen Sie es mit einem Wert, den ich abrufen, aus einer anderen Tabelle.
Tabelle: EXPORT
Name | email | employeeid | userid
Tabelle: USER
id | name | email | idnumber
Ist die neue Spalte EXPORT.userid
, das will ich gleich aus, um USER.id
. Bitte beachten Sie, dass id
und idnumber
sind NICHT die gleichen - idnumber
speichert die employeeid
während id
ist ein auto-Inkrement-PK. USER.idnumber
gleich EXPORT.employeeid
.
Möchte ich zum Auffüllen EXPORT.userid
mit USER.id
wenn export.employeeid = user.idnumber
.
Wie kann ich das machen mit Oracle-kompatible SQL-code?
Ich habe Folgendes versucht, aber es wirft mich ein Fehler.
UPDATE EXPORT
SET userid = ( SELECT id
FROM USER
WHERE USER.idnumber = EXPORT.employeeid
and USER.EMAIL = EXPORT.email)
WHERE EXISTS( SELECT 1
FROM USER
WHERE USER.idnumber = EXPORT.employeeid
and USER.EMAIL = EXPORT.email)
Aber ich bekomme diese Fehlermeldung
[Error] Execution (2: 19): ORA-01427: single-row subquery returns more than one row
Sie sicher, dass idnumber ist der Primärschlüssel der Tabelle user ,bitte überprüfen Sie es noch einmal
InformationsquelleAutor icefresh | 2013-07-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wahrscheinlich, diese Unterabfrage gibt mehr als eine Zeile für die angegebene E-Mail-und idnumber:
Versuchen unter Verwendung von DISTINCT, um Duplikate ausschließen:
Oder fügen Sie einige Beispiel-Daten auf deine Frage. Was ist der eindeutige Schlüssel von Tabellen, BENUTZER-und EXPORT?
idnumber ist nicht eine primary key-user, es speichert nur die id des Benutzers idnumber speichert die employeeid Aber, wenn id PK als DEUTLICHE nicht helfen. So ist die wichtigste Frage - was ist der eindeutige Schlüssel des BENUTZERS, es scheint, dass (idnumber, E-Mail) ist nicht Großbritannien.
Der primary key Benutzer-id, nicht idnumber.
wählen Sie idnumber,E-Mail,count() cnt from Benutzer group by idnumber,E-Mail having count()>1 .Wie viele Sie erhalten ?
Er kehrte drei Zeilen. Zwei leere, die nur eingebaut, ein Raum. Eine mit einem tatsächlichen Wert, die ich ausgeschlossen von der update-Anweisung. Am Ende, diese funktionierte einwandfrei:
InformationsquelleAutor Mikhail
Versuchen Sie die folgende Abfrage ausführen
Wenn Sie sehen, alle Zeilen, dann ist dies Ihr problem.
Zum Beispiel, wenn Sie einen BENUTZER-Tabelle, die so aussieht wie
Dann Ihre Abfrage
Wird return 1 und 2. In Reihenfolge für Sie zu arbeiten, es kann nur 1 Wert.
InformationsquelleAutor JayGee