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.' 
+ ------ + ------ + ---------------------- + ----- + ------ + ------ + ------- + ------- +
| 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の値に変更する必要があります-上記の選択のすべての基準が会った。テーブル内のすべてのレコードではなく、1つのレコードのみを変更したい。

いくつかのルートを試しましたが、すべて同じエラーが発生します:エラー1062(23000):キー「mk_ident__6fks」のエントリ「HWUPKR0MPOU8FGXBT394-NA-NA-NA-1-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.' 

この例では、1つのレコードのみを更新しようとしています。ただし、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 Web サイトの 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 に答える