난 당신이 집계 함수를 사용할 수 있다고 생각하지 않습니다 ON DUPLICATE
. MySQL은 같은 종류의 당신의 SQL을보고 :
insert into report_count_assets
expr
on duplicate key update
...
온 중복 expr
에서 무슨 일이 일어나고 있는지 모르고, 그것은 단지 그것을 다루는 하나의 중복 행이 있음을 알고있다. expr
내부에서 일어나는 일을 알지 못하면 count
이 작동하기위한 컨텍스트가 없습니다. 또한, 당신은 UPDATE에 values
를 사용하는 거 야 : 당신은 INSERT ... ON DUPLICATE KEY UPDATE
문의 INSERT
부분에서 열 값을 참조 할 수 UPDATE
절에 VALUES(col_name)
기능을 사용할 수 있습니다
.
values(count(x))
은 유효한 구문이 아닙니다. 그러나 values(column_name)
유효 그래서 이것은 작동합니다 :
INSERT INTO report_count_assets
(product_id, asset_count, asset_type_image, asset_type_video, asset_type_sound, asset_type_install)
SELECT products.product_id,
count(product_assets.asset_id),
count(case when assets.asset_type_id=1 THEN 1 END),
count(case when assets.asset_type_id=2 THEN 1 END),
count(case when assets.asset_type_id=3 THEN 1 END),
count(case when assets.asset_type_id=11 THEN 1 END)
FROM products
LEFT JOIN product_assets USING (product_id)
LEFT JOIN assets USING (asset_id)
WHERE products.brand_id=671
ON DUPLICATE KEY UPDATE
asset_count = values(asset_count),
asset_type_image = values(asset_type_image),
asset_type_video = values(asset_type_video),
asset_type_sound = values(asset_type_sound),
asset_type_install = values(asset_type_install);
내가 report_count_assets
에 product_id
열 이름을 추측했다.
그래도 작동하지 않는 경우 (분명히 그렇지 않은 경우) SELECT를 미리 계산하여 어렵게 수행 할 수 있습니다. 임시 테이블을 만듭니다
INSERT INTO t (product_id, product_count, assets1, assets2, assets3, assets11)
SELECT products.product_id,
count(product_assets.asset_id),
count(case when assets.asset_type_id=1 THEN 1 END),
count(case when assets.asset_type_id=2 THEN 1 END),
count(case when assets.asset_type_id=3 THEN 1 END),
count(case when assets.asset_type_id=11 THEN 1 END)
FROM products
LEFT JOIN product_assets USING (product_id)
LEFT JOIN assets USING (asset_id)
WHERE products.brand_id=671
을 그리고 임시 테이블은 당신이 정말로 원하는 삽입 할 것을 사용합니다 :
create temporary table t (
product_id int,
product_count int,
assets1 int,
assets2 int,
assets3 int,
assets11 int
)
는 채우기
insert into report_count_assets
select product_id, product_count, assets1, assets2, assets3, assets11
from t
on duplicate key update
asset_count = values(product_count),
asset_type_image = values(assets1),
asset_type_video = values(assets2),
asset_type_sound = values(assets3),
asset_type_install = values(assets11)
thi [질문] (http://stackoverflow.com/questions/2330840/mysql-invalid-use-of-group-function) 도움이 될 수도 있습니다 – diEcho
안녕하세요 @ diEcho, 난 특별히이 특정 번호가 어떤 제품을 찾고 아니에요 그들의 자산에서. 내 관심사는 제품이 이미 테이블에있을 때 쿼리의 업데이트 부분입니다. 어떻게 선택 조인 쿼리가 '중복 키 업데이트'에 구현 될 수 있는지 모르겠습니다. –