2015-02-05 96 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

相關問題