Ich mache eine Einfüge-Abfrage, bei der die meisten Spalten auf die neuen Werte aktualisiert werden müssten, wenn bereits ein eindeutiger Schlüssel vorhanden wäre. Es geht ungefähr so:
INSERT INTO lee(exp_id, created_by,
location, animal,
starttime, endtime, entct,
inact, inadur, inadist,
smlct, smldur, smldist,
larct, lardur, lardist,
emptyct, emptydur)
SELECT id, uid, t.location, t.animal, t.starttime, t.endtime, t.entct,
t.inact, t.inadur, t.inadist,
t.smlct, t.smldur, t.smldist,
t.larct, t.lardur, t.lardist,
t.emptyct, t.emptydur
FROM tmp t WHERE uid=x
ON DUPLICATE KEY UPDATE ...;
//update all fields to values from SELECT,
// except for exp_id, created_by, location, animal,
// starttime, endtime
Ich bin mir nicht sicher, wie die Syntax für die UPDATE
Klausel lauten soll. Wie verweise ich auf die aktuelle Zeile aus der SELECT
Klausel?
mysql
insert-update
dnagirl
quelle
quelle
t.
ist erforderlich. Ich habe auch einen Artikel über xaprb ( xaprb.com/blog/2006/02/21/flexible-insert-and-update-in-mysql ) gefunden, der diese Syntax verwendet :on duplicate key update b = values(b), c = values(c)
. Das funktioniert auch.Ich bin zwar sehr spät dran, aber nachdem ich einige berechtigte Fragen für diejenigen gesehen habe, die die
INSERT-SELECT
Abfrage mitGROUP BY
Klausel verwenden wollten , habe ich mir die Lösung dafür ausgedacht.Wenn ich die Antwort von Marcus Adams weiter nehme und darin abrechne
GROUP BY
, würde ich das Problem auf diese Weise lösenSubqueries in the FROM Clause
quelle