是否可以在 INSERT ON DUPLICATE KEY UPDATE 中使用 'join'

Is it possible to use 'join' in INSERT ON DUPLICATE KEY UPDATE

我正在尝试更改我的代码,因此当 webshop_stock 中没有匹配 ean13 的行时,它需要 INSERT 一个新行。

MYSQL 目前不接受我的代码。为了让它工作,我尝试了一些东西。我在全球网络上的搜索没有找到 INSERT INTO - JOIN - ON DUPLICATE KEY UPDATE 的好例子。所以我的问题是,这可能吗?

此时的问题是我的行在它们不存在时被创建,但存在的行没有得到更新。

测试了以下代码:

INSERT INTO webshop_stock 
   (id_warehouse,id_product,id_product_attribute,ean13, physical_quantity, usable_quantity)
   SELECT
        '1',
        pa.id_product,
        pa.id_product_attribute,
        pa.ean13, 
        ai.quantity,
        ai.quantity
    FROM
        webshop_product_attribute pa, 
        Adcount_input ai 
    WHERE 
        pa.ean13 = ai.ean13 
    AND NOT EXISTS 
        (SELECT id_product_attribute FROM webshop_stock
        WHERE id_product_attribute = pa.id_product_attribute)
    ON DUPLICATE KEY UPDATE 
        physical_quantity = ai.quantity,
        usable_quantity = ai.quantity

原码:

UPDATE
    webshop_stock AS s
JOIN(
    SELECT 
        pa.ean13, 
        pa.id_product_attribute,
        pa.id_product,
        ai.quantity 
    FROM 
        webshop_product_attribute pa, 
        Adcount_input ai 
    WHERE 
        pa.ean13=ai.ean13) q
SET
        s.id_warehouse = 1,
        s.id_product = q.id_product,
        s.id_product_attribute = q.id_product_attribute,
        s.ean13 = q.ean13,
        s.physical_quantity = q.quantity,
        s.usable_quantity = q.quantity 
WHERE 
        s.id_product_attribute = q.id_product_attribute

语法是:

INSERT <table> <field list>
SELECT ... JOIN ...

mysql中没有INSERT JOIN SELECT。这是 INSERT SELECT JOIN.

http://dev.mysql.com/doc/refman/5.1/en/insert-select.html

已解决这段代码满足了我的需要。

INSERT INTO webshop_stock 
   (id_warehouse, id_product, id_product_attribute, ean13, physical_quantity, usable_quantity)
   SELECT
        '1',
        pa.id_product,
        pa.id_product_attribute,
        pa.ean13, 
        ai.quantity,
        ai.quantity
    FROM
        webshop_product_attribute pa, 
        Adcount_input ai 
    WHERE 
        pa.ean13 = ai.ean13
    ON DUPLICATE KEY UPDATE
        physical_quantity = ai.quantity, usable_quantity = ai.quantity