Mysql 是否可以使用';加入';在重复密钥更新时插入

Mysql 是否可以使用';加入';在重复密钥更新时插入,mysql,join,insert,Mysql,Join,Insert,我正在尝试更改代码,因此当webshop\u stock中没有匹配的ean13行时,它需要插入一个新行 MYSQL目前不接受我的代码。为了让它工作,我尝试了一些方法。我在万维网上的搜索没有找到一个关于插入到-JOIN-on重复密钥更新的好例子。所以我的问题是,这可能吗 现在的问题是,我的行在不存在时被创建,但存在的行不会被更新 测试了以下代码: INSERT INTO webshop_stock (id_warehouse,id_product,id_product_attribute,

我正在尝试更改代码,因此当
webshop\u stock
中没有匹配的
ean13
行时,它需要
插入一个新行

MYSQL目前不接受我的代码。为了让它工作,我尝试了一些方法。我在万维网上的搜索没有找到一个关于
插入到-JOIN-on重复密钥更新的好例子
。所以我的问题是,这可能吗

现在的问题是,我的行在不存在时被创建,但存在的行不会被更新

测试了以下代码:

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 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 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
        

您需要一个
选择
。普通插入没有连接功能
insert。。。选择。。。加入
works<代码>插入。。。join
是非法语法。
但mysql不接受我的测试代码
-它是出错了还是根本没有做你期望的事情?报告错误时请说明,“不工作”不是我们告诉对方错误的方式。目前它没有给出错误,代码如下。它在行不存在时插入,但在行存在时不更新。