Vinzenz Mai: Hilfe bei einer Abfrage

Beitrag lesen

Hallo Michael,

Ich soll in einem Webshop für diverse Artikel (ca. 250 Stück) die Versandart ändern und will dies natürlich mit einer SQL-Abfrage machen.
Es gibt zwei betreffende Tabellen A und B. In Tabelle A stehen alle Artikel des Shops und in B stehen die erlaubten Versandarten pro Artikel.

wie kann man Tabellen A und B nennen? Diese sollten

  • Artikel
  • Versandarten

heißen. Dann kann man sich etwas darunter vorstellen.

Nun will ich aber nur die Artikel eines bestimmten Lieferanten ändern. Beide Tabellen haben die products_id gemeinsam. Daher habe ich folgende Abfrage erstellt:

SELECT B.products_id, B.shipping_type, B.allowed_types FROM B, A WHERE B.products_id = A.products_id AND A.manufacturers_id = 7 ORDER BY products_id;

Damit selektiert er mir in der Tabelle B nur die Artikel des einen Lieferanten. Nun kommt aber der Punkt an dem ich nicht weiterkomme. Wie kann ich nun mit einer UPDATE-Anweisung genau diese Datensätze auf einen Schlag ändern???

möchtest Du nun in der Tabelle Versandarten den Typ auf einen anderen Wert setzen? Ich kann mir den Inhalt nur sehr schwer vorstellen - und mein Statement könnte daher völlig falsch sein. Für Änderungen ist die UPDATE-Anweisung zuständig:

  
UPDATE  
    A Artikel                -- geben wir dem Kind einen vernünftigen Namen  
INNER JOIN                   -- ich mag explizite Join-Syntax  
    B Versandarten  
ON Versandarten.products_id = Artikel.products_id  
SET  
    Versandarten.allowed_types = <neuer wert>  
WHERE  
    Artikel.manufacturers_id = 7   -- hoffentlich kapiert der Optimierer, dass  
                                   -- er nicht die ganze Tabelle A nehmen muss  
/* alternativ könntest Du die WHERE-Klausel in die Join-Bedingung einbringen */ 

Damit ist für alle Artikel des entsprechenden Herstellers nur noch die neue
Versandart erlaubt. Wenn das in Deinem Sinne ist ...

Grundsätzlich empfehle ich Dir unsere Join-Artikel in SELFHTML aktuell:

Einführung in Joins
Fortgeschrittene Jointechniken

Eine Anmerkung zum Schluss:
Bei MySQL ist es immer empfehlenswert, die verwendete Version anzugeben, da
der Leistungsumfang und die Leistungsfähigkeit von MySQL enorm unterscheiden.

Freundliche Grüße

Vinzenz

PS: Vor dem Update unbedingt eine Sicherung der Datenbank erstellen!