Hi!
ich würde gerne einige Datensätze in einer Tabelle kopieren, jedoch das Datum ändern. Wie macht man das?
Indem du mit richtiger Syntax ein anderes zuweist. Schauen wir mal, was alles falsch ist.
INSERT INTO Tabelle_A (X,Y,Z,date)
Du möchtest 4 Werte einfügen, zudem verwendest du das Schlüsselwort date als Spaltenname. Soweit kein Problem, aber du musst das dann zur Unterscheidung von beispielsweise der Funktion DATE() als Bezeichner kennzeichnen. Alternativ kannst du auch einen Namen nehmen, der nicht reserviert ist.
VALUES (SELECT X,Y,Z FROM Tabelle_A AS TA
WHERE TA.date like "%2010-07-14%", "2010-01-01 00:00")
Drei Werte möchtest du aus einer Subquery holen und einen so hinzufügen. Subquerys müssen immer in eigenes Klammernpaar eingebettet sein, auch dann wenn für andere Syntaxelemente bereits Klammern vorhanden sind.
Außerdem sieht MySQL offensichtlich auch nicht die Ergebnisse der Subquery als Einzelwerte an, denn es beklagt sich auch bei korrigierter Klammersetzung, dass die Spaltenzahlen nicht übereinstimmen. Die Subquery ist jedoch auch gar nicht notwendig, denn es gibt eine spezielle INSERT-Syntax: INSERT ... SELECT. Formuliere dazu zunächst das SELECT so, dass es die gewünschten vier Werte in je einer Spalte liefert und ergänze dann das INSERT INTO Tabelle_A.
Doch halt! Jetzt kommt noch eine weitere Besonderheit zum Tragen: MySQL gestattet es nicht, eine Tabelle zu bearbeiten, während mit einer Subquery lesend darauf zugegriffen wird. Da brauchst du nun zwei Schritte:
- Selektiere die Daten in eine temporäre Tabelle
CREATE TEMPORARY TABLE foo SELECT ...
- Füge mit INSERT ... SELECT die Daten aus der temporären Tabelle in die eigentliche Tabelle ein.
Die temporäre Tabelle wird beim Verbindungsabbau automatisch entsorgt. Sie händisch zu löschen ist also nicht unbedingt nötig.
Lo!