1

OK I have 2 tables:

holdings: (id, long_name, value, date, sedol)
asset_key: (id, long_name, sedol)

My issue is that in holdings there are many records where the sedol wasn't filled in. I have the asset_key table however that maps a given long_name to a sedol.

Is there a query that can populate holdings.sedol with the result from asset_key?

Something like:

UPDATE holdings SET holdings.sedol = 
    SELECT asset_key.sedol FROM asset_key 
    WHERE sedol.long_name = asset_key.long_name
4

3 回答 3

1

这可以解决问题:

UPDATE 
  holdings 
    LEFT JOIN asset_key ON sedol.long_name = asset_key.long_name 
SET 
  holdings.sedol=asset_key.sedol
于 2013-10-14T13:20:09.130 回答
1

这应该有效:

UPDATE `holdings`
SET `holdings`.`sedol` = (SELECT `asset_key`.`sedol`
                          FROM   `asset_key`
                          WHERE  `asset_key`.`long_name` = `holdings`.`long_name`)

但是,如果我没记错的话,你应该确保这个SELECT子查询只返回一行,否则 MySQL 会抛出错误。

于 2013-10-14T13:21:28.147 回答
0

试试下面的查询:

update holdings 
SET holdings.sedol = asset_key.sedol
from holdings
inner join  asset_key on sedol.long_name = asset_key.long_name

注意:内部连接应该只产生单个值

于 2013-10-14T13:21:18.333 回答