2

複雑なSELECTクエリをUPDATEクエリに変換しようとしましたが、1064構文エラーが発生し続けます。

クエリの目的は、特定の条件を満たす特定の行を更新することですが、結合とGROUP BYおよびHAVINGステートメントにより、現在のクエリではこれが不可能になっています。私はこれが正しい方法ではないことを知っていますが、解決策がどうあるべきかを見つけることができません。誰かが解決策の方向性を教えてくれたら素晴らしいです!

私のクエリ(値は正しくありませんが、もう少しコンテキストを提供します):

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

私のテーブル構造:

テーブル製品: products_id、products_imageなど(すべての製品で同じ基本情報)

テーブルproducts_specifications: specifications_id、specifications_name

テーブルproducts_to_specifications: products_id、specifications_id、content

正しい解決策としてサブクエリを使用すると思いますが、クエリを構造化する方法がわかりません

4

1 に答える 1

1

MySqlは、UPDATEステートメントでGROUPBYをサポートしていません。以下のように、複雑なクエリを派生テーブルとして作成することで、簡単に更新できます。

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

これがお役に立てば幸いです。

于 2011-11-25T08:31:05.077 に答える