Frage zu INSERT ... SELECT
Frage zu INSERT ... SELECT
am 23.09.2006 12:46:06 von Gunnar Lindenblatt
Hallo!
Ich möchte basierend auf einer Tabelle (table_A) eine andere Tabelle
(table_B) füllen:
wenn in Tabelle table_A ein Wert vorhanden ist, so soll die
Zeilennummer table_A.id in die Tabelle table_B kopiert werden und das
aktuelle Datum ergänzt werden. Eigentlich dachte ich mir das sehr
einfach:
table_A: id:INT, values_A:wasauchimmer
table_B: id:INT, values_B:timestamp
INSERT INTO table_B (id, values_B)
SELECT table_A.id
FROM table_A
WHERE (table_A.values_A =3D '1000')
VALUES (table_A.id, NOW() )
Aber leider kann man so wohl keinen Wert (hier: Now() ) einfügen,
sondern nur Daten 1:1 kopieren?=20
Für Hilfe dankbar,
Gunnar
Re: Frage zu INSERT ... SELECT
am 23.09.2006 12:56:28 von Kris
Gunnar Lindenblatt wrote:
> Hallo!
>
> Ich möchte basierend auf einer Tabelle (table_A) eine andere Tabelle
> (table_B) füllen:
> wenn in Tabelle table_A ein Wert vorhanden ist, so soll die
> Zeilennummer table_A.id in die Tabelle table_B kopiert werden und das
> aktuelle Datum ergänzt werden. Eigentlich dachte ich mir das sehr
> einfach:
>
> table_A: id:INT, values_A:wasauchimmer
> table_B: id:INT, values_B:timestamp
>
> INSERT INTO table_B (id, values_B)
> SELECT table_A.id
> FROM table_A
> WHERE (table_A.values_A = '1000')
> VALUES (table_A.id, NOW() )
>
> Aber leider kann man so wohl keinen Wert (hier: Now() ) einfügen,
> sondern nur Daten 1:1 kopieren?
Suchst DU
insert into b (id, bval ) select a.id, now() as bla from a where a.val =
'1000'
?
Kris
Re: Frage zu INSERT ... SELECT
am 24.09.2006 01:42:00 von Gunnar Lindenblatt
Kristian Köhntopp schrieb:
> Suchst DU
>
> insert into b (id, bval ) select a.id, now() as bla from a where a.val =
=3D
> '1000'
>
> ?
>
Wohl eher nicht: AS definiert ja nur einen Alias. Mein Problem ist,
daß ich dynamisch Daten aus der ersten Tafel table_A übernehme,
statisch mit Daten ergänze und dann in table_B schreibe. Aber das
Ergänzen kriege ich nicht hin. :-(
- Gunnar
Re: Frage zu INSERT ... SELECT
am 24.09.2006 02:14:13 von Johannes Vogel
Hi Gunnar
Gunnar Lindenblatt wrote:
> Kristian Köhntopp schrieb:
>> Suchst DU
>> insert into b (id, bval ) select a.id, now() as bla from a where a.val =
>> '1000'
> Wohl eher nicht: AS definiert ja nur einen Alias. Mein Problem ist,
> daß ich dynamisch Daten aus der ersten Tafel table_A übernehme,
> statisch mit Daten ergänze und dann in table_B schreibe. Aber das
> Ergänzen kriege ich nicht hin. :-(
Du kannst das as auch weglassen.
insert into tableB (id,value) select id,now() from tableA where id=1000;
funktioniert. Sollte zumindest. Probier's aus.
Welche Version verwendest du?
HTH, Johannes
Re: Frage zu INSERT ... SELECT
am 24.09.2006 10:49:41 von Thomas Rachel
Gunnar Lindenblatt wrote:
> Kristian Köhntopp schrieb:
>
>> Suchst DU
>>
>> insert into b (id, bval ) select a.id, now() as bla from a where a.val =
>> '1000'
>>
>> ?
>>
>
> Wohl eher nicht:
Wieso nicht?
> AS definiert ja nur einen Alias.
der hier zugegebenermaÃen überflüssig, aber auch nicht schädlich ist.
> Mein Problem ist, daà ich dynamisch Daten aus der ersten Tafel table_A
> übernehme, statisch mit Daten ergänze und dann in table_B schreibe.
Was macht obiger Query anders? Ist er Dir vielleicht schon zu dynamisch?
Vielleicht gefällt Dir
set @jetzt=now();
insert into b (id, bval ) select a.id, @jetzt from a where a.val = '1000'
besser? Das sind allerdings zwei Queries, und ich glaube (weià es aber
nicht), daà now() ohnehin nur einmal am Anfang des Queries ausgewertet
wird. Bin mir da aber nicht sicher.
Wenn Du also 100000 Zeilen von a nach b schaufeln willst, die alle denselben
Timestamp bekommen sollen, dann könnte diese Variante mit der
Zwischenvariable geschickter sein.
Thomas
--
Die .sig wurde fristlos entlassen.
Danke!
am 25.09.2006 21:22:26 von Gunnar Lindenblatt
Hallo Johannes, hallo Thomas!
Vielen Dank! Genau so funktioniert es nach Wunsch!
Gruß,
Gunnar