Forum: PC-Programmierung MYSQL - Daten von einer Tabelle in eine ander kopieren


von Michael S. (Gast)


Lesenswert?

Hallo,
ich versuche gerade vergeblich einer Tabelle eine neue Zeile 
hinzuzufügen, die aus einer Konstanten (PHP-Variable) und 2 Einträgen 
einer anderen Tabelle besteht.

Mein Versuch in PHPMyAdmin:
1
INSERT INTO `daydata`
2
  ( 
3
    `Date` , `Offset` , `Gain`
4
  )
5
SELECT
6
  (
7
    '2015-12-29' , `Offset` FROM `parameters`, `Gain` FROM `parameters`
8
  )

Fehlermeldung:
#1064 - You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use 
near 'FROM `parameters`, `Gain` FROM `parameters`
         )' at line 7

Die Tabelle 'parameters' besteht derzeit nur aus einer Zeile, weshalb 
die Abfrage
1
SELECT `Offset` FROM `parameters`
auch nur einen Wert zurückliefert.

Wie geht es richtig?

Michael

von TBI (Gast)


Lesenswert?

; am Ende...

von TBI (Gast)


Lesenswert?

SELECT spalte1, spalte2 FROM table;

von Thomas (Gast)


Lesenswert?

und das mit dem doppelten FROM im SELECT-Statement ist auch Mist...

von Thomas (Gast)


Lesenswert?

Auszug aus http://dev.mysql.com/doc/refman/5.7/en/insert-select.html :

"With INSERT ... SELECT, you can quickly insert many rows into a table 
from one or many tables."

Da steht, wie es geht.

von Michael S. (Gast)


Lesenswert?

Hallo,
leider werde ich aus Euren Antworten und der verlinkten Seite nicht 
schlau.

So funktionierts auch nicht:
1
INSERT INTO `daydata`
2
  ( 
3
    `Date` , `Offset` , `Gain`
4
  )
5
SELECT
6
  (
7
    '2015-12-29' , `Offset`,`Gain` FROM `parameters`
8
  )
und so auch nicht:
1
INSERT INTO `daydata`
2
  ( 
3
    `Date` , `Offset` , `Gain`
4
  )
5
SELECT
6
  (
7
    '2015-12-29' , SELECT `Offset`,`Gain` FROM `parameters`
8
  )
Wie Ihr seht, bin ich blutiger Anfänger

Und wo brauche ich ein Semikolon? Habe ich noch bei keiner MySQL-Anfrage 
benötigt.

Michael

von Thomas (Gast)


Lesenswert?

Bitte lies die Fehlermeldungen!
Ich wette, die lauten jetzt anders, richtig?

Ich sehe sofort, dass
1
SELECT
2
  (
3
    '2015-12-29' , SELECT `Offset`,`Gain` FROM `parameters`
4
  )

nicht funktionieren kann. Da ist ein SELECT zuviel.

von Mysql-Wichtigtuer (Gast)


Lesenswert?

Michael S. schrieb:
> Und wo brauche ich ein Semikolon? Habe ich noch bei keiner MySQL-Anfrage
> benötigt.

Und wöfür brauchst Du die geschweiften Klammern? Die habe ich noch bei 
keiner MySQL-Anfrage benötigt.

von Thomas (Gast)


Lesenswert?

Am besten, Du testest erst mal nur das SELECT-Statement für sich allein. 
Wenn das funktioniert, kannst Du das INSERT davor setzen.

von Thomas (Gast)


Lesenswert?

Mysql-Wichtigtuer schrieb:
> Und wöfür brauchst Du die geschweiften Klammern?

Es ist schon spät, aber ich sehe da keine geschweiften Klammern.

von Mysql-Wichtigtuer (Gast)


Lesenswert?

Thomas schrieb:
> Es ist schon spät, aber ich sehe da keine geschweiften Klammern.

Hast ja recht, ich habe wohl 'nen Knick in der Optik.

von Thomas (Gast)


Lesenswert?

Aber Mysql-Wichtigtuer hat schon gewissermaßen trotzdem Recht:

Die Klammern sind überflüssig. Siehe unter obigem Link!
Lediglich im INSERT-Statement werden sie benötigt, um die Spaltennamen 
anzugeben.

von Thomas (Gast)


Lesenswert?

Lies mal unter obigem Link den Post von "Haakon Meland Eriksen"!
Er beschreibt ganz gut, wie dieses Statement funktioniert.

(Es reicht, die ersten 9 Zeilen zu lesen. Ohne Leerzeilen...)

von Michael S. (Gast)


Lesenswert?

Thomas schrieb:
> Lies mal unter obigem Link den Post von "Haakon Meland Eriksen"!
> Er beschreibt ganz gut, wie dieses Statement funktioniert.
>
> (Es reicht, die ersten 9 Zeilen zu lesen. Ohne Leerzeilen...)

Das funktioniert ja auch, wenn ich wirklich alle 3 Werte kopieren will.
Ich kriegs aber nicht hin, nur 2 Werte zu kopieren und den 3. als 
Konstante/PHP-Variable reinzuschreiben.

Michael

von Michael S. (Gast)


Lesenswert?

Thomas schrieb:
> Aber Mysql-Wichtigtuer hat schon gewissermaßen trotzdem Recht:
>
> Die Klammern sind überflüssig. Siehe unter obigem Link!
> Lediglich im INSERT-Statement werden sie benötigt, um die Spaltennamen
> anzugeben.

Das wars, danke!

Wer kommt denn da drauf, dass man zu viele Klammern setzen kann :-)
In allen mir bisher bekannten Programmiersprachen kann man eigentlich 
nie zu viel Klammern setzen (C, PHP, Javascript, Pascal, Python, ...)

Michael

von Thomas (Gast)


Lesenswert?

SQL ist ja auch keine Programmiersprache, sondern eine Datenbanksprache 
(siehe Wikipedia) =;-)

Die Klammersetzung ist tatsächlich wichtig.

von (prx) A. K. (prx)


Lesenswert?

Thomas schrieb:
> Die Klammersetzung ist tatsächlich wichtig.

In jeder anderen Sprache auch. An fast jeder Stelle.

von Achim H. (anymouse)


Lesenswert?

Michael S. schrieb:
> Das funktioniert ja auch, wenn ich wirklich alle 3 Werte kopieren will.
> Ich kriegs aber nicht hin, nur 2 Werte zu kopieren und den 3. als
> Konstante/PHP-Variable reinzuschreiben.
>
> Michael

Man kann auch konstante Werte SELECTen ;) -> SELECT 1 FROM dual ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.