-
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
-
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)
-
Gerade bemerkt das die MySQL-Version asbach ist. Werd' erst mal updaten...
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen