0

私は次のテーブル構造を持っています:

HSM

HSM_EXC_CODE    Y   VARCHAR2(60)
HSM_INSTR_CODE  Y   VARCHAR2(60)
HSM_ISIN    Y   VARCHAR2(60)
HSM_VWD_TICKERSYMBL Y   VARCHAR2(80)

TENFORE_EXCHANGE_MAP

HS_MARKET   Y   VARCHAR2(40)
TF_EXCHANGE Y   VARCHAR2(40)

TFV

TFE_ID  Y   NUMBER(22)
TFE_VSE_CODE    Y   VARCHAR2(1000)

異なるTFE_IDが同じTFE_VSE_CODEを持つことができます!これは、以下の更新クエリに欠けているものだと思います。

VSD

VSD_ON  Y   VARCHAR2(160)
VSD_ISIN    Y   VARCHAR2(15)

テーブルは次のように接続されています。

TENFORE_EXCHANGE_MAP.HS_MARKET   = HSM.HSM_EXC_CODE
TENFORE_EXCHANGE_MAP.TF_EXCHANGE = TFV.TFE_ID

hsm_isinフィールドとhsm_onフィールドに入力しようとしています。目標を達成するために、から名前を生成しようとしていますhsm.hsm_exc_codetfv.tfe_vse_code。しかし、私はそれを間違っています。トピックからエラーが発生しているからです。これは私が試したことです:

 UPDATE hsm
       SET hsm_isin               =
           (SELECT distinct vsd.vsd_isin
              FROM vsd, tfv, TENFORE_EXCHANGE_MAP
             WHERE vsd.vsd_on = hsm.hsm_instr_code || '.' || tfv.tfe_vse_code
                   AND hsm.hsm_exc_code = TENFORE_EXCHANGE_MAP.HS_MARKET
                   AND TENFORE_EXCHANGE_MAP.TF_EXCHANGE = tfv.tfe_id)
          ,hsm.hsm_vwd_tickersymbl =
           (SELECT distinct vsd.vsd_on
              FROM vsd, tfv, TENFORE_EXCHANGE_MAP
             WHERE vsd.vsd_on = hsm.hsm_instr_code || '.' || tfv.tfe_vse_code
                   AND hsm.hsm_exc_code = TENFORE_EXCHANGE_MAP.HS_MARKET
                   AND TENFORE_EXCHANGE_MAP.TF_EXCHANGE = tfv.tfe_id);
4

1 に答える 1

0

最初または 2 番目のサブクエリのいずれかで、キーの行が複数ある必要があります。次のようなものを試してください。

SELECT hsm.hsm_instr_code, 
     count( distinct( vsd.vsd_on ) ) cnt1, 
     count( distinct( vsd.vsd_isin ) ) cnt2
FROM vsd, tfv, TENFORE_EXCHANGE_MAP, hsm
WHERE vsd.vsd_on = hsm.hsm_instr_code || '.' || tfv.tfe_vse_code
AND hsm.hsm_exc_code = TENFORE_EXCHANGE_MAP.HS_MARKET
AND TENFORE_EXCHANGE_MAP.TF_EXCHANGE = tfv.tfe_id
GROUP BY hsm.hsm_instr_code
HAVING count( distinct( vsd.vsd_on ) ) > 1 OR count( distinct( vsd.vsd_isin ) ) > 1

注:複数行の問題を修正したら、以下のように 2 つのサブクエリを 1 つに単純化できます。

UPDATE hsm SET ( hsm_isin, hsm.hsm_vwd_tickersymbl ) =
           (SELECT distinct vsd.vsd_isin, vsd.vsd_on
              FROM vsd, tfv, TENFORE_EXCHANGE_MAP
             WHERE vsd.vsd_on = hsm.hsm_instr_code || '.' || tfv.tfe_vse_code
                   AND hsm.hsm_exc_code = TENFORE_EXCHANGE_MAP.HS_MARKET
                   AND TENFORE_EXCHANGE_MAP.TF_EXCHANGE = tfv.tfe_id); 
于 2013-01-09T17:18:06.793 に答える