Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Komplexer UPDATE will nicht?!

  1. #1
    Registrierter Benutzer
    Registriert seit
    25.10.2002
    Beiträge
    74

    Komplexer UPDATE will nicht?!

    Hallo zusammen,

    ich versuche nun seit Stunden einen MySQL-SQL-String zu basteln, komme aber nicht mehr weiter.
    Um ein UPDATE durchzuführen brauche ich eine Bedingung(WHERE) die über mehrere Tabellen hinweg vergleicht. Bei einem SELECT würde ich ja ganz einfach die diversen genutzten Tabellen im FROM-Bereich erwähnen. Doch genau dieses geht bei UPDATE anscheinend nicht? UPDATE scheint nur mit einer Tabelle arbeiten zu können?

    Folgend zwei Beispiele die ich durch hab, achja, Fehler ist "Syntax error 1064" ohne nähere Erläuterung, es wird das ganze Statement als Source gezeigt...

    Erstmal die tabellen:
    - accessproducts -
    +--+------+-----------+------------+------+
    | id | name | bandwidth | freeVolume| isFlat |
    +--+------+-----------+------------+------+
    | 1 | AccessStandard | 64 | 99 | true |
    | 2 | AccessEnhanced | 256 | 99 | true |
    | 3 | AccessProfi2 | 2562 | 99 | false |
    +--+------+-----------+------------+------+

    - products -
    +--+------+-------------+----------------+-------------------+------------------+
    | id | name |mandants_id |mailproducts_id |domainproducts_id |accessproducts_id |
    +--+------+-------------+----------------+-------------------+------------------+
    | 1 | ProduktStandard | 1 | 1 | 1 | 1 |
    | 2 | ProduktFamily | 1 | 2 | 1 | 1 |
    | 3 | ProduktProfi | 1 | 3 | 3 | 3 |
    +--+------+-------------+----------------+-------------------+------------------+

    - mandants -
    +--+------+-----------+
    | id | name | password |
    +--+------+-----------+
    | 1 | DemoMandant | |
    | 2 | DemoMandant2 | |
    +--+------+-----------+

    Und nun das erste SQL:
    ----------------------------------------------------------------------------------------
    UPDATE accessproducts,products,mandants
    SET accessproducts.name='AccessProfi2', accessproducts.bandwidth=2562,
    accessproducts.freeVolume=99.0, accessproducts.isFlat='false'
    WHERE mandants.name='DemoMandant' AND products.mandants_id=mandants.id
    AND products.accessproducts_id=accessproducts.id AND accessproducts.name='AccessProfi' LIMIT 1;
    ----------------------------------------------------------------------------------------

    Ein anderer gescheiterter Versuch:
    ----------------------------------------------------------------------------------------
    DROP tmp1;
    CREATE TEMPORARY TABLE tmp1 ENGINE=MEMORY SELECT accessproducts.id FROM accessproducts,products,mandants WHERE mandants.name='DemoMandant' AND products.mandants_id=mandants.id AND products.accessproducts_id=accessproducts.id AND accessproducts.name='AccessProfi';
    UPDATE accessproducts,tmp1 SET accessproducts.name='AccessProfi2', accessproducts.bandwidth=2562, accessproducts.freeVolume=99.0, accessproducts.isFlat='false' WHERE accessproducts.id=tmp1.id LIMIT 1;
    ----------------------------------------------------------------------------------------

    Wie man sehen kann will ich auch nur Werte aus einer einzigen Tabelle ändern, jedoch ist die zu ändernde Zeile nur durch einen Vergleich mit anderen Tabellen zu finden, daher brauche ich im WHERE-clause auch noch "products" und "mandants"...

    Wie mache ich das richtig?

    Grüße, QD

  2. #2
    Registrierter Benutzer
    Registriert seit
    28.08.2002
    Beiträge
    496
    welche datenbank(version) hast du? mysql?
    es könnte vielleicht mit einem subselect gehen:
    update bla
    set blub
    where exists (select xxx from yyy where bla.col = yyy.col)

  3. #3
    Registrierter Benutzer
    Registriert seit
    25.10.2002
    Beiträge
    74
    Gerade bemerkt das die MySQL-Version asbach ist. Werd' erst mal updaten...

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •