INSERT SELECT
ixen
- datenbank
Gemoje,
Ich möchte einen besonderen INSERT SELECT durchführen
INSERT INTO tbl_temp2 (fld_id)
SELECT tbl_temp1.fld_order_id
FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
so stehts auf der dev.mysql.com
aber wie kann ich eine mischung aus
INSERT VALUES('neuer wert') und SELECT bilden, so dass ich einen ganzen Datensatzblock kopieren kann bis auf eine spalte. die soll nämlich einen neuen wert bekommen. es handelt sich dabei aber nicht um den Primary Key.
Beispiel
|-- Primarykey
| |-- Wer der geändert werden soll
| |
a | b | c | d |
1 | 5 | 6 | 3 |
2 | 4 | 5 | 3 |
3 | 7 | 2 | 3 |
4 | 5 | 1 | 4 |
5 | 4 | 2 | 4 |
6 | 7 | 3 | 4 |
a ist ja wie bereits erwähnt der primary_key mit auto_increment und beim ausführen der, ich nenns mal, "Duplicate-Aktion", soll der auch schön weiter hochzählen... alles ganz normal
b und c sind die eigentlichen daten (davon gibts aber 10 Spalten, daher bin ich zu faul vorher einen Select * durchzuführen, da es zuviel schreibarbeit wäre (mir ist auch klar das dieses Posting mich zwar noch mehr Zeit kostet, aber wenn mans einmal weis... :D ))
d ist ein feld welches bestimmte Datensätze "zusammenhält". Es Groupt gewisse Daten (...)
Dieser Wert soll bei der Duplicate-Aktion geändert werden.
Beispiel: Ich möchte nun ein Duplicate vornehmen mit folgendem Insert-Select:
Insert (...) SELECT * FROM tbl WHERE d=4
(aber als ergebnis möchte ich dann folgendes haben:)
a | b | c | d |
1 | 5 | 6 | 3 |
2 | 4 | 5 | 3 |
3 | 7 | 2 | 3 |
4 | 5 | 1 | 4 | <-
5 | 4 | 2 | 4 | <-
6 | 7 | 3 | 4 | <-
7 | 5 | 1 | 5 | <-
8 | 4 | 2 | 5 | <-
9 | 7 | 3 | 5 | <-
wie geht das?
ist mein Problem überhaupt verstanden worden? :D
ixen
hi,
Beispiel: Ich möchte nun ein Duplicate vornehmen mit folgendem Insert-Select:
Insert (...) SELECT * FROM tbl WHERE d=4
(aber als ergebnis möchte ich dann folgendes haben:)4 | 5 | 1 | 4 | <-
5 | 4 | 2 | 4 | <-
6 | 7 | 3 | 4 | <-7 | 5 | 1 | 5 | <-
8 | 4 | 2 | 5 | <-
9 | 7 | 3 | 5 | <-
Wenn du den statischen Wert 5 für eine Spalte auslesen willst, dann selektiere 5.
gruß,
wahsaga
hi,
a | b | c | d |
1 | 5 | 6 | 3 |
2 | 4 | 5 | 3 |
3 | 7 | 2 | 3 |
4 | 5 | 1 | 4 | <-
5 | 4 | 2 | 4 | <-
6 | 7 | 3 | 4 | <-7 | 5 | 1 | 5 | <-
8 | 4 | 2 | 5 | <-
9 | 7 | 3 | 5 | <-
insert into Table (a,b,c,d) values(select a,b,c,5 from Table where d=4)
so in der Art?
Gruss,
Seppel
insert into tbl (b,c,d) values(select b,c from tbl where d=4, '5')
so in etwa d soll den statischen wert 5 bekommen und der rest soll KOPIERT werden so wie er ist bis auf d!
ixen
hi,
insert into tbl (b,c,d) values(select b,c from tbl where d=4, '5')
so in etwa d soll den statischen wert 5 bekommen und der rest soll KOPIERT werden so wie er ist bis auf d!
Dann LESE den Rest AUS, so wie er ist.
gruß,
wahsaga
Hallo,
so in etwa d soll den statischen wert 5 bekommen und der rest soll KOPIERT werden so wie er ist bis auf d!
Also genau so wie es seppel schon vorgegeben hat.
Man kann auch statische Werte anstelle von Spalten in der auszulesenden Spaltenliste bei SELECT-Statements verwenden.
Grüße
Klaus
Hallo,
wie wäre es wenn du b und c mit einem order by-statement sortierst? Der Rest sollte irgendwie auch hinzubekommen sein.
Grüße,
Wolfram
fürs Archiv: So muss die Synthax aussehen!!!!
insert into Table (a,b,c,d) select a,b,c,5 from Table where d=4
und nicht so:
insert into Table (a,b,c,d) values(select a,b,c,5 from Table where d=4)
ixen
hola,
schuldig im Sinne der Anklage ;-)
da kann man ja nur hoffen das dir durch diese Fehlleitung nicht zuviel Zeit verloren gegangen ist!
Gruss,
Seppel