我有一个返回正确值的查询:
SELECT cnl.id cID,
snl.id sID,
cnl.fk_lei cnl,
sid.lei sid,
cnl.fk_cnty_id cCid,
snl.fk_cnty_id sCid,
sec.id secID,
sid.id sidID
FROM cici.name_loc cnl
INNER JOIN se4.name_loc snl
ON snl.legal_name = cnl.legal_name
AND snl.fk_cnty_id = cnl.fk_cnty_id
INNER JOIN se4.sym_exch_cnty sec
ON sec.id = snl.fk_sec_id
INNER JOIN se4.identifiers sid
ON sid.fk_sec_id = sec.id
AND sid.lei = 'NA'
WHERE cnl.legal_name = 'Apple Inc.'
+------+------+----------------------+-----+------+------+-------+-------+ | cID | sID | cnl | sid | cCid | sCid | secID | sidID | +------+------+----------------------+-----+------+------+-------+-------+ | 2010 | 3104 | HWUPKR0MPOU8FGXBT394 | NA | 233 | 233 | 13756 | 9722 | +------+------+----------------------+-----+------+------+-------+-------+
我想修改它,以便我可以更新查询中使用的表中的字段。 所以在上面的结果中,字段'sid'将从'NA'更新为'HWUPKR0MPOU8FGXBT394'
确切地说,'标识符'表有一个需要的列'sid.lei' 只有在满足上述选择中的所有条件时,才会将“NA”更改为“cnl.fk_lei”table.column中的值。我只想更改一条记录,而不是表中的所有记录。
我尝试了几条路线,它们都给出了同样的错误: ERROR 1062(23000):密钥'mk_ident__6fks'重复输入'HWUPKR0MPOU8FGXBT394-NA-NA-NA-1-1'
这告诉我更新是错误的。
以下是我尝试过的更新之一:
UPDATE identifiers AS b
INNER JOIN cici.name_loc cnl
ON cnl.legal_name = 'Apple Inc.'
INNER JOIN se4.name_loc snl
ON snl.legal_name = cnl.legal_name
AND snl.fk_cnty_id = cnl.fk_cnty_id
INNER JOIN se4.sym_exch_cnty sec
ON sec.id = snl.fk_sec_id
SET b.lei = cnl.fk_lei
WHERE cnl.legal_name = 'Apple Inc.'
在这种情况下,我只是尝试更新一条记录。但是,我有数百个 snl.legal_name = cnl.legal_name的记录,我需要用cnl.fk_lei中的数字更新所有记录。
任何想法都非常感谢。谢谢!
答案 0 :(得分:1)
我认为您需要将sid.lei = 'NA'
(缺失)替换为cnl.legal_name = 'Apple Inc.'
(已存在于加入条件中),其中:
UPDATE identifiers AS b
INNER JOIN cici.name_loc cnl
ON cnl.legal_name = 'Apple Inc.'
INNER JOIN se4.name_loc snl
ON snl.legal_name = cnl.legal_name
AND snl.fk_cnty_id = cnl.fk_cnty_id
INNER JOIN se4.sym_exch_cnty sec
ON sec.id = snl.fk_sec_id
SET b.lei = cnl.fk_lei
WHERE sid.lei = 'NA'
答案 1 :(得分:1)
以下是来自MySQL website
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
您想要做的是以下内容:
UPDATE identifiers AS b
SET b.lei = (select cnl.fk_lei
from cici.name_loc cnl
INNER JOIN se4.name_loc snl ON snl.legal_name = cnl.legal_name
and snl.fk_cnty_id = cnl.fk_cnty_id
INNER JOIN se4.sym_exch_cnty sec ON sec.id = snl.fk_sec_id
where cnl.legal_name = 'Apple Inc.')
请注意,这将更新所有identifiers
行,您可能需要将where clause
添加到更新中以限制其影响。