我正在尝试将值从一个库存表更新到另一个库存表。但是,某些值被复制为 NULL,因为源表中不存在该库存。我认为 INNER JOIN 只查看两个表之间共享的值。我的 allStocks 表中的股票比 divStocks 多得多,但是 divStocks 中有一些股票在 allStocks 中不存在。我只想将价格从 allStocks 复制到 divStocks 中,而不是用 NULL 覆盖任何价格。

这是我当前的查询:

UPDATE `divStocks` ds INNER JOIN `allStocks` als ON
`ds`.`tickerSymbol` = `als`.`tickerSymbol` SET `ds`.`price` =
`als`.`price`, `ds`.`priceAsOf` = `als`.`priceAsOf`;

最佳答案

我会说最简单的解决方案是向您的查询添加 WHERE 以专门排除在 allStocks 表中没有价格的行。与使用类似 RIGHT JOIN 之类的东西相比,这样做会增加查询的可读性,这是相当罕见的。

UPDATE `divStocks` ds
INNER JOIN `allStocks` als ON `ds`.`tickerSymbol` = `als`.`tickerSymbol`
SET `ds`.`price` = `als`.`price`, `ds`.`priceAsOf` = `als`.`priceAsOf`
WHERE `als`.`price` IS NOT NULL;

关于MySQL - 使用内部连接更新正在创建空值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56470616/

10-12 16:33