2011-11-21 2 views
1

복잡한 SELECT 쿼리를 UPDATE 쿼리로 변환하려고 시도했지만 계속해서 1064 구문 오류가 발생합니다.복잡한 MySQL SELECT를 UPDATE로 변환

쿼리의 목표는 특정 조건을 충족하는 특정 행을 업데이트하는 것입니다.하지만 조인과 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 등 (기본 정보 동일 모든 제품)

표 product_specifications : specifications_id, 명세서 이름

,210

테이블 products_to_specifications : products_id, specifications_id, 내용

내가 사용하는 서브 쿼리해야합니다 최적의 솔루션에 대한 생각,하지만 난 쿼리를 구성하는 방법을 잘 모르겠어요

답변

0

MySQL은 GROUP을 지원하지 않습니다 BY UPDATE 문에서. 아래와 같이 복잡한 쿼리를 파생 테이블로 만들어 쉽게 업데이트 할 수 있습니다.

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 

희망이 도움이 될 것입니다.

+0

전체 코드를 볼 수 없다 ... 나는 오타가 있다고 생각한다! p를 교체해야합니다. 마. 전체 SELECT (그렇지 않으면 마지막으로 t.products_id를 통해 액세스 할 수 없습니다.) –