mySQL:如何根据其他表中的值更新表和字段?

时间:2010-07-28 16:45:35

标签: mysql sql-update

我有一个数据库,里面有很多数据。幸运的是它总是很隐蔽,所以我应该能够运行一些不错的SQL并清理它。这是故事:

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:是的!数据很好!
  • 模特== sku& nid!= nid:嘘!数据错误,因此应更新uc_stock_product.nid以匹配uc_product.nid中的值

[我想更蛮力的做法是匹配SKU / model上的每一行并重置每个uc_product_stock.nid以匹配uc_product.nid - 主要是错误的那些将被纠正并且正确的将被重置为相同的值并保持正确。如果你认为这是最好的答案,我会对此持开放态度,但它让我觉得有点好笑。我不喜欢弄乱已经正确的数据。]

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

你能不能像这样运行一个简单的更新语句:

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

答案 1 :(得分: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