Konvertieren von komplexem mysql SELECT in UPDATE

  • Ich habe versucht, eine komplexe SELECT-Abfrage in eine UPDATE-Abfrage zu konvertieren, erhalte aber weiterhin den 1064-Syntaxfehler.

    Das Ziel für die Abfrage ist das Aktualisieren bestimmter Zeilen, die bestimmte Bedingungen erfüllen. Die Verknüpfungen und die Anweisungen GROUP BY und HAVING machen dies jedoch bei der Abfrage, die ich jetzt habe, unmöglich. Ich weiß, dass dies nicht der richtige Weg ist, aber ich kann nicht herausfinden, wie die Lösung aussehen sollte. Ich wäre großartig, wenn mir jemand eine Richtung für eine Lösung nennen könnte!

    Meine Abfrage (die Werte sind nicht korrekt, geben aber mehr Kontext):

     UPDATE products p
    JOIN products_to_specifications pts ON pts.products_id = p.products_id
    JOIN products_specifications ps ON ps.specifications_id = pts.specifications_id
    SET p.products_image = 'file_name.jpg'
    WHERE ps.specifications_name IN ('color') 
    AND pts.content IN ('black')
    AND p.products_manufacturer = 'BMW'
    AND p.products_name = 'M5'
    GROUP BY p.products_id
    HAVING COUNT(DISTINCT ps.specifications_name) = 1 AND COUNT(DISTINCT pts.content) = 1
     

    Meine Tabellenstruktur:

    Tabellenprodukte: products_id , products_image usw. (Basisinformationen für jedes Produkt gleich)

    Tabelle Produktspezifikationen: Spezifikations-ID, Spezifikationsname

    Tabelle products_to_specifications: products_id, Specifications_id, content

    Ich denke, für die richtige Lösung werde ich eine Unterabfrage verwenden, aber ich bin nicht sicher, wie um die Abfrage zu strukturieren

    22 November 2011
    Ruben
1 answer
  • MySql unterstützt GROUP BY in der UPDATE-Anweisung nicht. Sie können die Aktualisierung einfach durchführen, indem Sie die komplexe Abfrage als abgeleitete Tabelle wie folgt erstellen:

     UPDATE products p, (SELECT p.products_id FROM products p
    JOIN products_to_specifications pts ON pts.products_id = p.products_id
    JOIN products_specifications ps ON ps.specifications_id = pts.specifications_id
    WHERE ps.specifications_name IN ('color') 
    AND pts.content IN ('black')
    AND p.products_manufacturer = 'BMW'
    AND p.products_name = 'M5'
    GROUP BY p.products_id
    HAVING COUNT(DISTINCT ps.specifications_name) = 1 AND COUNT(DISTINCT pts.content) = 1) AS t
    SET p.products_image = 'file_name.jpg' WHERE p.products_id=t.products_id
     

    Ich hoffe, das hilft Ihnen.

    25 November 2011
    Suraj