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