1

我有一个返回正确值的查询:

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.' 
+------+------+----------+-----+------ +-----+-------+--------+
| 身份证 | 标识 | cnl | 席位 | cCid | SCID | 秒ID | 标识号 |
+------+------+----------+-----+------ +-----+-------+--------+
| 2010 | 3104 | HWUPKR0MPOU8FGXBT394 | 不适用 | 233 | 233 | 13756 | 9722 |
+------+------+----------+-----+------ +-----+-------+--------+

我想修改它,以便我可以更新查询中使用的表中的字段。因此,在上述结果中,字段“sid”将从“NA”更新为“HWUPKR0MPOU8FGXBT394”

确切地说,“标识符”表有一个“sid.lei”列,需要从“NA”更改为“cnl.fk_lei”table.column 中的值 - 仅当上述选择中的所有条件都为遇见了。我只想更改一条记录,而不是表中的所有记录。

我尝试了几条路线,它们都给出了相同的错误:错误 1062 (23000): Duplicate entry 'HWUPKR0MPOU8FGXBT394-NA-NA-NA-1-1' for key 'mk_ident__6fks'

这告诉我更新出错了。

这是我尝试的更新之一:

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 中的数字更新所有记录。

任何想法都非常感谢。谢谢!

4

2 回答 2

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' 
于 2012-11-15T01:45:10.357 回答
1

下面是来自MySQL 网站的 UPDATE 语法

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到更新中以限制其影响。

于 2012-11-15T01:46:06.820 回答