syntax INSERT ... SELECT

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