2
UPSERT를 수행하는 쿼리가 있습니다 (삽입 - 있지만 존재하는 경우 업데이트).MySQL UPSERT가 별칭을 인식하지 못합니다.
MySQL은 여기, 그렇지 유효 불평 쿼리입니다 :
insert into
mytable (user_id, num_products_observed, num_purchased_percent)
(select
A.user_id,
B.total 'num_products_observed',
case
when A.purchased is null then 0
else A.purchased/B.total
end 'num_purchased_percent'
from
(select user_id, count(prod_observed) 'total' from products where user_id = ?) B
left join (select user_id, count(prod_purch) 'purchased' from products_purchased) A on B.user_id = A.user_id
) newsum -- <--- ISSUE IS HERE
ON DUPLICATE KEY UPDATE
num_products_observed = newsum.num_products_observed,
num_purchased_percent = newsum.num_purchased_percent
나는이 당신에 의미가 있기를 바랍니다. 문제는 ) newsum
인 줄에 있습니다. MySql은 테이블에 부여 할 별칭에 대해 불평합니다. user_id는이 테이블에서 고유합니다 (mytable
).
B.total이 null 일 수 있습니다.이 경우 newsum의 모든 항목이 null입니다. 그러면 아무 것도 삽입하거나 업데이트하지 않습니다. (또는 모든 항목에 대해 user_id 및 0으로 업데이트 할 수 있습니다. 미세 너무).
내가 잘못하고있는 것에 대한 의견이 있으십니까? 감사합니다
매뉴얼에 대해 아무것도 없습니다 선택 항목의 별명을 지정할 수 있습니다 (선택 항목은 대괄호 안에 있으면 안됩니다). INSERT SELECT 테이블을 참조하는 것과는 반대로 "중복 된 키를 사용하여" "A"및 "B"테이블을 다시 참조 할 수 있습니까? – Robbie
참고로, 해당하는 경우 별칭 이름에 '따옴표'대신 '역 따옴표'를 사용해야합니다. 이름에 따옴표가 필요하지 않으므로 (특수 문자가 없기 때문에) 백틱을 지원하지 않는 다른 서버와의 쿼리 호환성을 보장하기 위해 이름을 사용하지 마십시오. 참조 : https://dev.mysql.com/doc/refman/5.0/en/identifiers.html – Lance