Mysql: Insert mit Select

Enigma

Captain Pro
Registriert
Apr. 2004
Beiträge
3.946
Folgende Datenbankabfrage scheitert:
Code:
Query failed: "INSERT INTO 
  `gw_vlans` 
  (
  `vlan_id`, 
  `customer_id`, 
  `type`, 
  `name` 
  ) 
VALUES 
  (
  (SELECT MAX(v1.`vlan_id`)+1 FROM `gw_vlans` v1 WHERE v1.`type`='test'), 
  '11844', 
  'test', 
  '' 
  ) 
;"
MySQL said: You can't specify target table 'gw_vlans' for update in FROM clause
Kennt jemand einen workaround für dieses Problem? Denn laut Mysql-Doku:
http://dev.mysql.com/doc/refman/5.1/de/subquery-errors.html schrieb:
Sie können eine Unterabfrage zur Zuweisung innerhalb einer UPDATE-Anweisung verwenden, da Unterabfragen in UPDATE- und DELETE-Anweisungen ebenso zulässig sind wie in SELECT-Anweisungen. Allerdings können Sie nicht dieselbe Tabelle (in diesem Fall Tabelle t1) sowohl in der FROM-Klausel der Unterabfrage als auch als Aktualisierungsziel angeben.
 
Also am einfachsten wäre das mit Transaktionen und könnte dann z.B. so aussehen:
Code:
START TRANSACTION;
SELECT @newId:= MAX( vlan_id ) + 1 FROM gw_vlans WHERE type = 'test';

SET @newId = COALESCE( @newId, 1 );

INSERT INTO gw_vlans ( vlan_id,	customer_id, type, name ) 
	VALUES ( @newId, 11844, 'test', '' );

COMMIT;
 
Zuletzt bearbeitet:
Zurück
Oben