2010-07-28 49 views
1

我有一個數據庫中有數據。幸運的是,它一直很靈活,所以我應該能夠運行一些漂亮的SQL並清理它。這裏的故事:mySQL:如何更新表和字段依賴於其他表中的值?

Table 'uc_products': 
nid model 
1  asdf 
2  qwer 
3  ghjk 

Table 'uc_product_stock': 
nid sku 
1  asdf 
22 qwer 
34 ghjk 

所以你可以看到model = sku和nid = nid。表uc_products中包含所有正確的數據,而uc_product_stock是數據不正確(nid與sku不匹配)的數據。我想通過uc_product_stock併爲每個條目看,比較uc_product:

  • 凡模型== SKU & NID == NID:是啊!數據很好!
  • Where model == sku & nid!= nid:boo!利空數據,所以uc_stock_product.nid應更新爲匹配uc_product.nid

值[我想一個更強力的方式做這將是匹配SKU /模型每一行和重置每個uc_product_stock。 nid匹配uc_product.nid - 主要是錯誤的將被糾正,正確的將被重置爲相同的值並保持正確。如果你認爲這是最好的答案,我很樂於接受,但這讓我感覺有點有趣。我不喜歡亂用已經正確的數據。]

感謝您的幫助!

回答

1

你能只運行一個簡單的更新語句是這樣的:

UPDATE uc_product_stock a 
    SET a.nid = (SELECT MIN(b.nid) 
       FROM uc_products b 
       WHERE b.sku = a.sku) 
+0

+1正是我一直打算寫 – mdma 2010-07-28 17:00:18

+0

謝謝! 「b」不起作用(我認爲是因爲它在被聲明之前被調用?),但我只是將它換出來用於「UPDATE uc_product_stock SET uc_product_stock.nid =(SELECT MIN(uc_products.nid)FROM uc_products WHERE uc_products.model = uc_product_stock.sku)「,一切都很好! – Eileen 2010-07-28 17:37:43

0

我沒有測試過這一點,但這個應該工作:

UPDATE uc_product_stock AS s 
INNER JOIN uc_product AS p ON p.model=s.sku SET s.sku=p.model 
WHERE p.nid!=s.nid AND p.model=s.sku 
相關問題