MySQL UPSERT无法识别别名

时间:2014-11-28 06:56:44

标签: mysql left-join upsert

我有一个执行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)也没关系。)

对我做错了什么的任何想法?感谢

1 个答案:

答案 0 :(得分:0)

您是否尝试使用VALUES语句。

您可以使用UPDATE子句中的VALUES(col_name)函数来引用INSERT ... ON DUPLICATE KEY UPDATE语句的INSERT部分中的列值

dev.mysql