2012-05-21 89 views
0

這是我的更新查詢。更新查詢問題

UPDATE sugarcrm.qb_salesorders_leads_c, sugarcrm.qb_salesorders 
    SET sugarcrm.qb_salesorders_leads_c.qb_salesorders_leadsleads_ida = sugarcrm.qb_salesorders.memo, sugarcrm.qb_salesorders_leads_c.qb_salesorders_leadsqb_salesorders_idb = sugarcrm.qb_salesorders.id 
    WHERE sugarcrm.qb_salesorders.id = sugarcrm.qb_salesorders_leads_c.qb_salesorders_leadsqb_salesorders_idb 

當我運行這一點,讓我受影響的行0

這是我使用相同的信息是在WHERE語句select語句。

SELECT * from qb_salesorders_leads_c, sugarcrm.qb_salesorders 
    WHERE sugarcrm.qb_salesorders_leads_c.qb_salesorders_leadsqb_salesorders_idb = sugarcrm.qb_salesorders.id 

這將返回354行,這是我期望在更新查詢上更新的行。我錯過了什麼。請幫忙!

+0

您的所有查詢都是有效的,但由於某些原因,沒有任何數據受到影響。 我現在已經找出了這個問題。好像有多個記錄具有相同的id號碼,所以mysql無法更新。我將回到繪圖板。謝謝你的幫助。 – Jeff

回答

1

轉換的隱式連接到一個明確的一個:

UPDATE sugarcrm.qb_salesorders_leads_c leads 
    INNER JOIN sugarcrm.qb_salesorders orders 
    ON orders.id = leads.qb_salesorders_leadsqb_salesorders_idb 
SET leads.qb_salesorders_leadsleads_ida = orders.memo, 
    leads.qb_salesorders_leadsqb_salesorders_idb = orders.id 

正如你所看到的,我也用別名使SQL更加緊湊和清晰。

+0

在更新過程中,它仍然返回受影響的行:0,但只是在執行select語句時,您的聯接工作正常。 – Jeff

+0

嗯。這個更新有點有趣。兩個想法:(1)通常情況下,您將有另一個WHERE條件來限制要更新的行。但在這裏,我們正在更新連接中的每一行。 (2)「UPDATE返回實際改變的行數。」請參閱http://dev.mysql.com/doc/refman/5.5/en/update.html。更改您的數據以強制要更新的內容並再次運行查詢。 –

+0

我要修改這個問題 – Jeff

0

要使用連接更新,必須使用顯式聯接語法:

UPDATE sugarcrm.qb_salesorders_leads_c 
INNER JOIN sugarcrm.qb_salesorders 
    ON qb_salesorders_leadsqb_salesorders_idb.id 
     = sugarcrm.qb_salesorders_leads_c.qb_salesorders_leadsqb_salesorders_idb 
SET sugarcrm.qb_salesorders_leads_c.qb_salesorders_leadsleads_ida 
     = qb_salesorders_leadsqb_salesorders_idb.memo 
    , sugarcrm.qb_salesorders_leads_c.qb_salesorders_leadsqb_salesorders_idb 
     = sugarcrm.qb_salesorders.id 
+0

我要修改問題 – Jeff