Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Unverständliches Update Problem

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von sqlnoobi, 13 Januar 2014.

  1. sqlnoobi

    sqlnoobi Neuer Benutzer

    Hallo liebe Forengemeinde

    Ich habe ein mir scheinbar unlösbares Problem und zwar geht es um folgende (eigentlich) simple Update -Anweisung.

    Code:
    UPDATE `test1`.`lagern` SET `Menge` = '3' WHERE `lagern`.`Lagerplaetze_idLagerplaetze` = 2 AND `lagern`.`Materialien_idMaterialien` = 3
    Hiermit möchte ich das Atribut Menge auf den Wert 3 setzen.
    Anzumerken ist wohl noch das "Lagerplaetze_idLagerplaetze" und "Materialien_idMaterialien" Primary Keys sind. Menge ist ein ganz normales Atribut.

    Jetzt zum eigentlichen Fehler:
    1093 - You can't specify target table 'materialien' for update in FROM clause

    Leider sagt mir das recht wenig und googlen hat auch nicht wirklich geholfen.

    Wäre klasse wenn mir jemand erklären könnte wie man es richtig macht ;)


    MfG
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Eine Tabelle kann nur einen PK haben. Welcher ist es, oder ist er zusammengesetzt?

    Deine Fehlermeldung paßt nicht zum gezeigten Befehl. Laß mal testweise die Table-Namen im Where-Teil weg.

    MySQL nicht zu verwenden ;-)


    Andreas
     
  3. sqlnoobi

    sqlnoobi Neuer Benutzer

    Das ging ja schnell, super ^^

    Also erstmal ja es ist ein zusammengesetzer Schlüssel.

    Der Fehler bleibt jedoch der selbe sogar wenn ich nur diese Anweisung ausprobiere:
    Code:
    UPDATE `lagern` SET `Menge` = '3'
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Mir ist hier nicht ersichtlich, wie es zu "1093 - You can't specify target table 'materialien' for update in FROM clause" kommen soll.

    Auch wenn ich MySQL für krass kapott halte - hier denke ich, machst Du etwas völlig anderes als Du uns sagst.

    Andreas
     
  5. sqlnoobi

    sqlnoobi Neuer Benutzer

    Hm ich habe hal den relevanten ausschnitt meines Modells an Bild angehängt, vielleicht wird es ja dann klarer. [​IMG]

    Fall das Bild nicht geht hier noch der direkte Link:
    http://www.bilder-upload.eu/show.php?file=62210b-1389611645.jpg

    Edit: Und hier möchte ich nur in der Tabelle "lagern" die Menge bei einem schon exsistierenden Datensatz verändern.

    MfG
     
  6. akretschmer

    akretschmer Datenbank-Guru


    Bunte Bilder sind zwar nett, helfen aber oft nicht wirklich. Nachvollziehen kann ich Dein Problem damit zumindest nicht. Hier funktioniert:

    Code:
    test=# create table lagerplaetze (id int primary key);  
    CREATE TABLE
    test=*# create table materialien (id int primary key);  
    CREATE TABLE
    test=*# create table lagern (id_platz int references lagerplaetze, id_material int references materialien, menge int, primary key(id_platz, id_material));
    CREATE TABLE
    test=*# insert into lagerplaetze values (3);
    INSERT 0 1
    test=*# insert into materialien values (5);
    INSERT 0 1
    test=*# insert into lagern values (3,5,10);
    INSERT 0 1
    test=*# update lagern set menge = 30 where id_platz = 3 and id_material = 5;
    UPDATE 1
    test=*# select * from lagern;
    id_platz | id_material | menge
    ----------+-------------+-------
      3 |  5 |  30
    (1 row)
    
    
     
  7. sqlnoobi

    sqlnoobi Neuer Benutzer

    Ich werd nicht mehr -.-
    Ich hab jetzt mehr oder weniger aus Verzweiflung die Datenbank gelöscht und neu angelegt (mit 1:1 den selben Daten!) und siehe da es funktieniert :mad:

    Ich glaube das war ein sehr guter Tipp^^
    Trotzdem vielen dank für die Mühe

    MfG
     
  8. ukulele

    ukulele Datenbank-Guru

    Hast du eventuell einen Trigger auf der Tabelle gehabt? Dann kann der einen Fehler erzeugt haben und SQL würde dir diesen zurück liefern.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden