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

mySQL:如何根据其他表中的值更新表和字段?,mysql,sql-update,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

我有一个数据库,里面有可疑的数据。幸运的是,它一直都很可疑,所以我应该能够在它上面运行一些漂亮的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是具有与sku不匹配的不良nid数据的表。我想查看uc_产品库存,并将每个条目与uc_产品进行比较:

其中model==sku&nid==nid:是的!数据是好的! 其中型号==sku&nid=妮德:嘘!错误数据,因此应更新uc_stock_product.nid以匹配uc_product.nid中的值 [我想一个更粗暴的方法是匹配SKU/模型上的每一行,并重置每个uc_product_stock.nid以匹配uc_product.nid-主要是错误的将被纠正,正确的将重置为相同的值并保持正确。如果你认为这是最好的答案,我愿意接受,但这会让我感到很费钱我有点好笑。我不喜欢弄乱已经正确的数据。]


谢谢您的帮助!

您能运行一个简单的更新语句吗

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

您可以运行如下简单的update语句:

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

我还没有对此进行测试,但应该可以:

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

我还没有对此进行测试,但应该可以:

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

谢谢!b不工作,我想是因为它在声明之前被调用了?但我只是把它换成了更新uc_product_stock SET uc_product_stock.nid=从uc_products中选择MINuc_products.nid,其中uc_products.model=uc_product_stock.sku,一切都很好!谢谢!b不工作,我想是因为它在声明之前被调用了?但我只是把它换成了更新uc_product_stock SET uc_product_stock.nid=从uc_products.model=uc_products_stock.sku的uc_products中选择MINuc_products.nid,一切都很好!