SELECT-Anweisung in INSERT - Denkfehler gesucht.
Julian Hofmann
- datenbank
Hallo.
Bisher habe ich mich immer mehr oder weniger elegant um umfangreichere Statements herumgemogelt, diesmal geht's aber nicht.
Aber was ist an der Anweisung für MySQL falsch?
INSERT INTO pruefung ( F_OID ) VALUES ( SELECT f.F_OID
FROM fuehrerscheinklasse f, person p
WHERE ( p.name = 'Mustermann' AND
p.vorname = 'Max' AND
f.P_OID = p.P_OID ) )
Der zugewiesene Wert allein lässt sich ohne Probleme abfragen und liefert auch exakt einen Wert.
Vielen Dank schon jetzt für Eure Hilfe.
Grüße aus Würzburg
Julian
Hi,
Aber was ist an der Anweisung für MySQL falsch?
akaif kann mySQL keine Subselects oder ist hier sehr eingeschränkt.
Schau mal bei mysql.com nach, vielleicht findest du dort auch
nen würgaround.
Gruß Stefan
Hi,
kann mySQL keine Subselects oder ist hier sehr eingeschränkt.
Schau mal bei mysql.com nach, vielleicht findest du dort auch
nen würgaround.
Ja. Geht afair noch nicht. Zwar ist das wohl fuer eine der naechsten Versionen geplant (oder als alpha oder beta vielleicht schon draussen), aber sonst kann man sich bisher wohl nur anderweitig behelfen.
Der Workaround waere in diesem Fall meiner Ansicht nach, vor dem Insert das Select gesondert durchzufuehren und dann mit diesen Inhalten das Insert durchzufuerhen. Aber vielleicht weiss ja jemand noch was eleganteres.
Gruesse
Ralf
Hi
Ja. Geht afair noch nicht. Zwar ist das wohl fuer eine der naechsten Versionen geplant (oder als alpha oder beta vielleicht schon draussen), aber sonst kann man sich bisher wohl nur anderweitig behelfen.
Der Insert ist eine Ausnahme wo es MySQL doch kann.
http://www.mysql.com/doc/I/N/INSERT_SELECT.html
und da steht auch wieso die Ursprungsvariante nicht gehen kann,
die Syntax ist fehlerhaft.
Gruss Daniela
Hallo.
Soweit schonmal danke, immerhin weiß ich jetzt schon mal, dass ich mich auf einem Randgebiet befinde, auf das sich nur wenige begeben (und folglich helfen können). Glückwunsch, Julian! :-(
und da steht auch wieso die Ursprungsvariante nicht gehen kann,
die Syntax ist fehlerhaft.
Hm, abgesehen von zwei Klammerungen kann ich keinen Unterschied erkennen (und ohne die geht's auch nicht). Im Beispiel auf mysql.com wird lediglich aus einer Tabelle etwas selektiert, gegen einen SELECT aus zwei Tabellen ist aber nicht einzuwenden (da unabhängig von der INSERT-Tabelle).
Was hab ich da übersehen oder falsch verstanden?
Grüße aus Würzburg
Julian
Hi Julian
Hm, abgesehen von zwei Klammerungen kann ich keinen Unterschied erkennen (und ohne die geht's auch nicht). Im Beispiel auf mysql.com wird lediglich aus einer Tabelle etwas selektiert, gegen einen SELECT aus zwei Tabellen ist aber nicht einzuwenden (da unabhängig von der INSERT-Tabelle).
Was hab ich da übersehen oder falsch verstanden?
Du hast da noch das Schlüsselwort Values stehen, das gehört da nicht hin:
INSERT INTO pruefung ( F_OID ) ( SELECT f.F_OID
FROM fuehrerscheinklasse f, person p
WHERE ( p.name = 'Mustermann' AND
p.vorname = 'Max' AND
f.P_OID = p.P_OID ) )
So müsste es klappen, ist einfach ohne das Values zwischen dem INTO und SELECT entfernt.
Achtung, habs aber nicht getestet und da MySQL.com im Moment nicht zu erreichen
ist nur aus SQL in a Nutshell geklaut.
Gruss Daniela
Hallo Daniela,
Du hast da noch das Schlüsselwort Values stehen, das gehört da nicht hin:
Ups. Hab schon soviel dranrumgebastelt heute, war irgendwie schon etwas blind. Vielen Dank, so geht's jetzt.
Ok, wenn ich das jetzt richtig sehe (auch in Nutshell), dann ist's aber nicht möglich über eine Anweisung auch noch zusätzliche Werte mit einzufügen, wie in etwa:
INSERT INTO pruefung ( F_OID,Auto ) ( SELECT f.F_OID
FROM fuehrerscheinklasse f, person p
WHERE ( p.name = 'Mustermann' AND
p.vorname = 'Max' AND
f.P_OID = p.P_OID ), "Mercedes" )
Also entweder per SELECT _oder_ direkt Werte, richtig?
Grüße aus Würzburg
Julian
Hallo Julian,
An Daniela reiche ich zwar noch lange nicht heran, aber hier kann ich auch
antworten:
Also entweder per SELECT _oder_ direkt Werte, richtig?
Richtig.
UU koenntest du mit temporaeren Tabellen arbeiten, wenn du das unbedingt
brauchst, aber das ist IMHO nicht die feine Englische :)
Gruesse,
CK
Hi Julian
INSERT INTO pruefung ( F_OID,Auto ) ( SELECT f.F_OID
FROM fuehrerscheinklasse f, person p
WHERE ( p.name = 'Mustermann' AND
p.vorname = 'Max' AND
f.P_OID = p.P_OID ), "Mercedes" )
Also entweder per SELECT _oder_ direkt Werte, richtig?
http://www.mysql.com/doc/S/E/SELECT.html
Zweiter Abschnitt:
mysql> SELECT 1 + 1;
-> 2
Daraus folgere ich jetzt einfach mal (ungetestet!) dass auch das geht:
Select f.F_OID, 'Mercedes'
from ....
Und da dass dann ein gültiges Select-Statement ist, müsstest
du das auch im Insert brauchen können.
Gruss Daniela
Hallo Daniela.
Irgendwie schon interessant, wie umfangreich die Möglichkeiten sind. Nur muss man sich wohl doch einfach viel viel stärker damit befassen um alle Möglichkeiten zu kennen (oder zu wissen, wo man am besten nachschaut). Hat auch wieder geklappt.
Vielen Dank für Deine Hilfe.
Grüße aus Würzburg
Julian
Boah Daniela,
Der Insert ist eine Ausnahme wo es MySQL doch kann.
Dein MySQL Wissen ist ja wirklich allertiefst beeindruckend (da habe ich neulich schon kraeftigst mit den Oehrchen geschlackert :o).
Gruesse
Ralf