Antworten auf deine Fragen:
Neues Thema erstellen

MySQL Spaltenweise aus anderer Tabelle kopieren

strichcode

Nicht mehr ganz neu hier

Hallo an alle.
Ich bin etwas ratlos und das übliche gegoogle bringt mich nicht weiter.
Ich habe in einer DB mehrere Tabellen. Aus einer Tabelle möchte ich den Inhalt der Spalte "alte_nummer" in eine andere Tabelle in die Spalte "neue_nummer" kopieren. Das ganze so oft, wie Datensätze vorhanden sind.

Mein Versuch:
Code:
UPDATE neue_tabelle SET neue_nummer = (SELECT alte_nummer FROM alte_tabelle WHERE neue_tabelle.ID = alte_tabelle.ID)
ergibt folgende Fehlermeldung: #1242 - Subquery returns more than 1 row
und kopiert hat er natürlich nix.

Beim Suchen im Netz bin ich nur darauf gestoßen, das es so funktionieren sollte. Die Fehlermeldung verwirrt mich nur, denn es sollen ja die Einträge aus ca. 500 Datensätze überschrieben werden.

Was mache ich falsch?
Es wäre toll, wenn einer von Euch mir über den Berg helfen könnte. Vielen Dank.
LG
Heike
 

Chickenshooter

Alter Mann

Hallo

Du musst deine UPDATE Anweisung auch noch mit einem WHERE einschränken.
Und die Fehlermeldung ist normal wenn mehr als eine Datensatz bei einem SELECT raus kommt.
Du kannst ne Nummer nicht mit mehreren Nummern überschreiben.

Oder ne ganz neue Tabelle....
und das Ergebnis der SELECT Anweisung per INSERT in die "ganz neue" Tabelle einfügen.

mfg
 

Duddle

Posting-Frequenz: 14µHz

Ich habe es mal in SQLFiddle probiert und die Syntax funktioniert erstmal.
Die Fehlermeldung deutet ja darauf hin, dass eine Zeile in
Code:
SELECT alte_nummer FROM alte_tabelle WHERE neue_tabelle.ID = alte_tabelle.ID
doppelt vorkommt, was auf einen doppelten Primärschlüssel hinweisen könnte.


Duddle
 

strichcode

Nicht mehr ganz neu hier

Danke für Deine Mühe Chickenshooter,
doch verstehe ich nicht so viel.
Ich habe doch eine WHERE-Einschränkung: WHERE neue_tabelle.ID = alte_tabelle.ID,
oder was meinst Du?
Und:INSERT INTO geht nicht, da er dann pro Spalte, die ich ändern möchte, die Datensätze unten anfügt. Ich brauche keine neuen Datensätze, sondern die bestehenden Datensätze sollen um den Inhalt der Spalte aus der alten Tabelle upgedatet werden. Der Rest der Tabellenspalten sollen unangetastet bleiben. (Ich weiß mich nicht besser auszudrücken)
 

strichcode

Nicht mehr ganz neu hier

Duddle, vielen Dank.
Bedeutet das, wenn ich eine Spalte kopieren möchte, die Zahlen beinhaltet, diese nicht doppelt sein dürfen? Wenn ja, kann man keine Spalten kopieren, in denen oft die gleiche Zahl vorkommt?
Oder anders ausgedrückt, das mit dem primärschlüssel verstehe ich nicht. Gibt es eine ID doppelt?
 

fakerer

Aktives Mitglied

wenn man annimmt das jeweils ID dein Primärschlüssel ist ist das egal wenn ein wert öfters vorkommt,

WHERE neue_tabelle.ID = alte_tabelle.ID

ergibt folgende Fehlermeldung: #1242 - Subquery returns more than 1 row
damit ist gemeint das eine id in der alten Tabelle doppelt sein muss denn sonst würde das subquery immer nur 1 Ergebnis liefern
 

strichcode

Nicht mehr ganz neu hier

fakener, vielen Dank für Deine Erklärung.
Die Daten der alten Tabelle sollen deshalb teilweise übernommen werden, weil sie veraltet ist und nicht besonders gut durchdacht war, was "größer werden" angeht. So gibt es dort keinen Primärschlüssel. In der neuen Tabelle habe ich eine "laufende Nummer" angelegt, doppelte sollten hier nicht vorkommen. In der alten Tabelle bin ich davon ausgegangen, daß die ID das "eindeutigste" Feld ist.
Ich habe den Befehl jetzt nun mit
UPDATE IGNORE
ausgeführt. Das führt dazu, das die Einträge vorgenommen werden. Wenn ich die Datensätze überprüfe (ein paar am Anfang, ein paar Stichproben in der Mitte und ein paar am Ende), sieht es gut aus.
Sollte nun doch ein Datensatz fehlerhaft sein, ist es durch die Menge der Arbeitserleichterung vertretbar.
Bestimmt nicht sauber gelöst, aber es bringt mich erstmal weiter.

Vielen Dank an alle, die mir geholfen haben.
 

fakerer

Aktives Mitglied

Ignore kenne ich eigentlich nur im Zusammenhang das man Fremdschlüssel Ignoriert.
Wenn es noch nicht so viele Daten sind kannst du auch die alte und die neue Tabelle exportieren und dir das ganze in xls zurecht "schieben" und dann in die neue importieren,
Noch weniger sauber aber auch eine Möglichkeit :)
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.635
Beiträge
1.538.449
Mitglieder
67.556
Neuestes Mitglied
Ggirl
Oben