syntax INSERT ... SELECT
am 14.08.2007 13:17:36 von Frank Kulow
Hallo NG,
INSERT binaer (artn) SELECT id FROM at WHERE art='a1';
funktioniert.
Wie fülle ich aber mehrere Spalten?
INSERT binaer (artn,wert) values(SELECT id FROM at WHERE art='a1','1');
geht jedenfalls nicht.
Danke
Frank
Re: syntax INSERT ... SELECT
am 14.08.2007 13:32:22 von Christian Kirsch
Am 14.08.2007 13:17 schrieb Frank Kulow:
> Hallo NG,
>
> INSERT binaer (artn) SELECT id FROM at WHERE art='a1';
>
> funktioniert.
>
> Wie fülle ich aber mehrere Spalten?
>
> INSERT binaer (artn,wert) values(SELECT id FROM at WHERE art='a1','1');
>
>
> geht jedenfalls nicht.
>
>
Erstaunlich. Könnte es daran liegen, dass in
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
auch kein VALUES vorkommt?
Vielleicht muss man das einfach (schauder) ... weglassen?
--
Christian
Re: syntax INSERT ... SELECT
am 14.08.2007 14:39:20 von Axel Schwenke
Frank Kulow wrote:
> Hallo NG,
>
> INSERT binaer (artn) SELECT id FROM at WHERE art='a1';
>
> funktioniert.
>
> Wie fülle ich aber mehrere Spalten?
>
> INSERT binaer (artn,wert) values(SELECT id FROM at WHERE art='a1','1');
Das SELECT muß die gleiche Anzahl Spalten zurück liefern, wie das
INSERT erwartet. (und das values() ist natürlich Quatsch)
Übung 1: schreibe ein SELECT Statement das in drei Spalten die Werte 0,
42 und 4711 liefert.
Übung 2: schreibe ein SELECT Statement das alle Werte der Spalte `id`
aus Tabelle `at` sowie eine zweite Spalte mit dem Wert 1 liefert.
XL
Re: syntax INSERT ... SELECT
am 15.08.2007 07:29:06 von Frank Kulow
Guten Morgen,
d.h. es gibt keine Möglichkeit bei einem INSERT ein SELECT-Ergebnis
zusammen mit einen direkt vorgegebenen Wert in eine Tabelle einzufügen?
Frank
Re: syntax INSERT ... SELECT
am 15.08.2007 07:39:07 von Christian Kirsch
Frank Kulow schrieb:
> Guten Morgen,
>
> d.h. es gibt keine Möglichkeit bei einem INSERT ein SELECT-Ergebnis
> zusammen mit einen direkt vorgegebenen Wert in eine Tabelle einzufügen?
>
doch, und Axel hat Dir den Weg deutlich gezeigt ...
Re: syntax INSERT ... SELECT
am 15.08.2007 08:54:06 von Frank Kulow
also statt:
INSERT binaer (artn,wert) values(SELECT id FROM at WHERE art='a1','1');
umständlich:
CREATE table temp1 (id SMALLINT,wert SMALLINT default 1);
INSERT temp1 (id) SELECT id from at where art='a1';
INSERT binaer (artn,wert) SELECT id,wert from temp1;
DROP table temp1;
im Prinzip habe ich die Struktur vom Beispiel unter:
http://dev.mysql.com/doc/refman/5.1/de/example-foreign-keys. html
Wie gebe ich Antonio einen neuen Pullover?
Frank
Re: syntax INSERT ... SELECT
am 15.08.2007 09:14:47 von Kai Ruhnau
Frank Kulow schrieb:
> also statt:
>
> INSERT binaer (artn,wert) values(SELECT id FROM at WHERE art='a1','1');
>
>
> umständlich:
>
> CREATE table temp1 (id SMALLINT,wert SMALLINT default 1);
>
> INSERT temp1 (id) SELECT id from at where art='a1';
>
> INSERT binaer (artn,wert) SELECT id,wert from temp1;
>
> DROP table temp1;
*grusel*
> im Prinzip habe ich die Struktur vom Beispiel unter:
>
> http://dev.mysql.com/doc/refman/5.1/de/example-foreign-keys. html
>
>
> Wie gebe ich Antonio einen neuen Pullover?
Hast du bereits die zwei Übungsaufgaben von Axel abgearbeitet?
Wie waren deine Lösungen dafür?
Grüße
Kai
Re: syntax INSERT ... SELECT
am 15.08.2007 10:21:23 von Claus Reibenstein
Frank Kulow schrieb:
> also statt:
>
> INSERT binaer (artn,wert) values(SELECT id FROM at WHERE art='a1','1');
>
>
> umständlich:
>
> CREATE table temp1 (id SMALLINT,wert SMALLINT default 1);
>
> INSERT temp1 (id) SELECT id from at where art='a1';
>
> INSERT binaer (artn,wert) SELECT id,wert from temp1;
>
> DROP table temp1;
Das ist in der Tat viel zu umständlich und _nicht_ die adäquate Lösung
Deines Problems. Es genügt ein einziges INSERT. Nur den SELECT musst Du
entsprechend anpassen.
Bitte schau Dir nochmal Axels Nachricht
an und bearbeite die dortigen Übungen 1 und 2. Insbesondere die Übung 2
sollte Dich auf den richtigen Weg bringen.
Falls Du mit diesen Übungen schon nicht klar kommst, empfehle ich
_dringend_ das Studium eines SQL-Grundlagenbuchs oder -Tutorials.
Ferner solltest Du Dir mal anschauen.
Gruß. Claus
Re: syntax INSERT ... SELECT
am 15.08.2007 11:04:05 von Axel Schwenke
Frank Kulow wrote:
[umständliche "Lösung" gesnipt]
Wie andere schon schrieben: das geht viel einfacher.
Noch ein Tip: MySQL verlangt bei SELECT keine Tabelle.
Deswegen kannst du z.B. sowas machen:
mysql> SELECT VERSION();
mysql> SELECT 1+1;
PS: du bist jetzt vielleicht enttäuscht weil du gehofft hast,
wir würden dir die fertige Lösung sagen. Aber glaub mir:
es ist viel besser wenn du das selber rausfindest.
XL
Re: syntax INSERT ... SELECT
am 15.08.2007 11:33:19 von Sven Paulus
Axel Schwenke wrote:
> mysql> SELECT VERSION();
> mysql> SELECT 1+1;
Du hast "FROM dual" vergessen ;-)
Re: syntax INSERT ... SELECT
am 15.08.2007 12:55:50 von Frank Kulow
Axel Schwenke schrieb:
> Frank Kulow wrote:
>
> [umständliche "Lösung" gesnipt]
>
> Wie andere schon schrieben: das geht viel einfacher.
> Noch ein Tip: MySQL verlangt bei SELECT keine Tabelle.
> Deswegen kannst du z.B. sowas machen:
>
> mysql> SELECT VERSION();
> mysql> SELECT 1+1;
>
>
> PS: du bist jetzt vielleicht enttäuscht weil du gehofft hast,
> wir würden dir die fertige Lösung sagen. Aber glaub mir:
> es ist viel besser wenn du das selber rausfindest.
>
ok danke allen, inzwischen hab ich's, das Unbekannte war mir, daß ich
SELECT spaltenname,1 ...
darf.
Frank