Query mit 2 Subselects schläg fehl

Query mit 2 Subselects schläg fehl

am 19.01.2006 16:57:12 von jpieper

Ich habe einen recht kleinen Query mit zwei Subselects, aber wenn ich
den ausführe bekomme ich nur eine Fehlermeldung. Hier erstmal der
Query:

UPDATE
commands
SET
regex=3D(select regex from commands where name=3D"SJMP"),
eval=3D(select eval from commands where name=3D"SJMP")
WHERE
name LIKE "%JMP";

Und wenn ich den nun ausführen will, bekomme ich folgende
Fehlermeldung:

ERROR 1093 (HY000): You can't specify target table 'commands' for
update in FROM clause

Wo ich hier nun grad schreibe, kann es vllt. sein, dass ich in den
Subselects nicht wieder die Tabelle "commands" nutzen kann? Dann
müsste ich doch eine temporäre Tabelle zuvor erstellen und dann aus
ihr die Daten auslesen, oder?

Re: Query mit 2 Subselects schläg fehl

am 19.01.2006 17:14:36 von Sibylle Koczian

Jan Pieper schrieb:
> Ich habe einen recht kleinen Query mit zwei Subselects, aber wenn ich
> den ausführe bekomme ich nur eine Fehlermeldung. Hier erstmal der
> Query:
>=20
> UPDATE
> commands
> SET
> regex=3D(select regex from commands where name=3D"SJMP"),
> eval=3D(select eval from commands where name=3D"SJMP")
> WHERE
> name LIKE "%JMP";
>=20
> Und wenn ich den nun ausführen will, bekomme ich folgende
> Fehlermeldung:
>=20
> ERROR 1093 (HY000): You can't specify target table 'commands' for
> update in FROM clause
>=20
> Wo ich hier nun grad schreibe, kann es vllt. sein, dass ich in den
> Subselects nicht wieder die Tabelle "commands" nutzen kann? Dann
> müsste ich doch eine temporäre Tabelle zuvor erstellen und dann aus=

> ihr die Daten auslesen, oder?
>=20

Aus der aktuellen Dokumentation zu MySQL 5.0, Abschnitt 13.3.5 UPDATE=20
Syntax:

"Currently, you cannot update a table and select from the same table in=20
a subquery."

Hier ist der Link:
http://dev.mysql.com/doc/refman/5.0/en/update.html

Also genau Deine Vermutung.

Aber mir sieht Deine Update-Anweisung so aus, als gäbe es nur zwei Wert=
e=20
zum Einsetzen, einen für das Feld 'regex', einen für das Feld 'eval'.=
Da=20
scheint eine temporäre Tabelle Overkill. Oder was übersehe ich?

--=20
Dr. Sibylle Koczian
Universitaetsbibliothek, Abt. Naturwiss.
D-86135 Augsburg
e-mail : Sibylle.Koczian@Bibliothek.Uni-Augsburg.DE

Re: Query mit 2 Subselects schläg fehl

am 19.01.2006 17:23:47 von Hartmut Holzgraefe

Jan Pieper wrote:
> ERROR 1093 (HY000): You can't specify target table 'commands' for
> update in FROM clause
>=20
> Wo ich hier nun grad schreibe, kann es vllt. sein, dass ich in den
> Subselects nicht wieder die Tabelle "commands" nutzen kann?

Kann es vielleicht sein das das was in Fehlermeldungen steht auch
tatsächlich so gemeint ist? (Auch wenn insb. MicroSoft manchmal
gegenteiliges vermuten lässt?)

Siehe auch:

http://dev.mysql.com/doc/refman/5.0/en/update.html

Currently, you cannot update a table and select from
the same table in a subquery.

(letzter Satz auf der Seite)



> Dann
> müsste ich doch eine temporäre Tabelle zuvor erstellen und dann aus=

> ihr die Daten auslesen, oder?

wozu gleich ne Tabelle für nur zwei Werte?

SELECT @regex:=3Dregex, @eval:=3Deval
FROM commands
WHERE command =3D "SJMP";

UPDATE commands
SET regex=3D@regex, eval=3D@eval
WHERE name LIKE "%JMP";



--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com

http://www.mysql.com/support/

Re: Query mit 2 Subselects schläg fehl

am 19.01.2006 18:32:04 von jpieper

Okay sorry ich habe dummerweise die Subselects im Bezug auf die
Fehlermeldung komplett ausser acht gelassen.

Naja das mit den @-Teilen kenne ich noch garnicht. Von daher kam mir so
erst ne temporäre Tabelle in den Sinn. Ich werde mir diese @-Teile mal
anschauen, wie genau man die einsetzt. (auch wenn es aus deiner,
Hartmut, Antwort schon indirekt herausgeht)

Hat aber super funktioniert. Danke.