2015-02-05 100 views
1

我试图改变我的代码,所以当在webshop_stock中没有匹配的“ean13”的行时,它必须插入。是否有可能在INSERT ON DUPLICATE KEY UPDATE中使用'join'

但是mysql不接受我测试过的代码,为了得到它,我尝试了几件事情。我在谷歌的搜索,我没有找到一个工作示例与“插入 - 加入 - 重复密钥更新”,这是可能的吗?

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

测试了以下的代码:

$get_input = " 
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 
"; 

原始代码:

$get_input = " 
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"; 
+0

'但是mysql不接受我测试过的代码' - 是不是出错了,还是根本没有做到你期望的那样?报告错误时请说明性,“不工作”不是我们如何告诉对方出了什么问题。 – 2015-02-05 22:44:03

+0

目前它不给出任何错误,代码如下。它在行不存在时插入,但在行存在时不更新。 – Crezzur 2015-02-06 08:45:58

回答

1

解决这段代码做什么,我需要的。

$get_input = " 
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 

"; 
1

的语法是:

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

Ť这里是NOINSERT JOIN SELECT在mysql中。它是INSERT SELECT JOIN

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

+0

我正在使用“插入”

但这不起作用?看着你提供的链接,但不知道它是否需要? – Crezzur 2015-02-05 20:35:28

+0

你需要一个'select'。一个普通的插入有** NO **连接功能'insert ... select ... join'工程。 'insert ... join'是非法语法。 – 2015-02-05 20:36:12

+0

如何将我的当前代码放入选择命令中?它需要从2个表格中提取数据以便将其放入第3个表格。但是,当代码不存在时,它必须插入。我可以在2个查询中做到这一点,但是当使用9000篇文章时,它会激发18.000查询,所以我正在寻找一种方法来处理1个查询。你能否提供一个例子,因为我对你试图指向我的方式感到困惑 – Crezzur 2015-02-05 20:43:19

相关问题