syntax INSERT ... SELECT

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
Frank Kulow [ Di, 14 August 2007 13:17 ] [ ID #1794812 ]

Re: syntax INSERT ... SELECT

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
Christian Kirsch [ Di, 14 August 2007 13:32 ] [ ID #1794813 ]

Re: syntax INSERT ... SELECT

Frank Kulow <kulow [at] gmx.de> 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
Axel Schwenke [ Di, 14 August 2007 14:39 ] [ ID #1794814 ]

Re: syntax INSERT ... SELECT

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
Frank Kulow [ Mi, 15 August 2007 07:29 ] [ ID #1795897 ]

Re: syntax INSERT ... SELECT

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 ...
Christian Kirsch [ Mi, 15 August 2007 07:39 ] [ ID #1795898 ]

Re: syntax INSERT ... SELECT

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
Frank Kulow [ Mi, 15 August 2007 08:54 ] [ ID #1795899 ]

Re: syntax INSERT ... SELECT

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
Kai Ruhnau [ Mi, 15 August 2007 09:14 ] [ ID #1795900 ]

Re: syntax INSERT ... SELECT

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 <f9u7uf$9ic$1 [at] news.albasani.net>
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 <http://learn.to/quote> anschauen.

Gruß. Claus
Claus Reibenstein [ Mi, 15 August 2007 10:21 ] [ ID #1795901 ]

Re: syntax INSERT ... SELECT

Frank Kulow <kulow [at] gmx.de> 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
Axel Schwenke [ Mi, 15 August 2007 11:04 ] [ ID #1795904 ]

Re: syntax INSERT ... SELECT

Axel Schwenke <axel.schwenke [at] gmx.de> wrote:
> mysql> SELECT VERSION();
> mysql> SELECT 1+1;

Du hast "FROM dual" vergessen ;-)
Sven Paulus [ Mi, 15 August 2007 11:33 ] [ ID #1795905 ]

Re: syntax INSERT ... SELECT

Axel Schwenke schrieb:
> Frank Kulow <kulow [at] gmx.de> 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
Frank Kulow [ Mi, 15 August 2007 12:55 ] [ ID #1795906 ]
Datenbanken » de.comp.datenbanken.mysql » syntax INSERT ... SELECT

Vorheriges Thema: Datentyp String/ordinal
Nächstes Thema: Als Benutzer Datenbanken anlegen und löschen