2016-10-25 4 views
0

バックグラウンド - エクスポートされたCSVデータセットがインポートされ、新しいシステムに移行されました。私は新しいシステムでは必要ないので、このデータセットに識別IDはありませんが、このCSVに追加のデータを追加する必要があります。csvのテキスト値に対する結合によるOracleの更新

私はCSVをOracleテーブルにインポートし、2つの新しい列、FieldLabelEDRNとELEMENTIDを作成しました。私はので、私は、ORA-00907エラーが発生し、次の

UPDATE EDRN_NEW.DATADIC 
SET FIELDLABELEDRN = 
    (SELECT short_name 
    FROM edrn.md$$_all_data_elements 
    WHERE active_yn = 'YES' 
    ORDER BY short_name 
), 
SET ELEMENTID = 
    (SELECT element_id 
    FROM edrn.md$$_all_data_elements 
    WHERE active_yn = 'YES' 
    ORDER BY short_name 
) 

を試してみました、元のテーブルから関連データと、それらの2列を更新したいと私はそれが非常に基本的なことを知っています。私は必要な価値を得る方法を考えるのに苦労しています。私はまた、2つのテーブルをshort_name =フィールドのラベルにまとめて、element_idをプルするだけでしたが、本当に必要ですが、OracleでUPDATEでJOINを使用できないことに慣れていません

アドバイス/提案をいただければ幸いです。

+0

あなたは、彼らが@GordonLinoffコメントに加えて。 –

+0

に行くの行に新しい値を一致させるいくつかの方法を必要とする、あなたの構文が間違っている、 'SET'は一度だけ使用する必要があります。 – sagi

+0

関連性はありませんが、 'set(FIELDLABELEDRN、ELEMENTID)=(select short_name、element_id from ...) 'というサブ・セレクトだけを使用してパフォーマンスを向上させることができます - サブセレクトの' order by'は役に立たないしかし、 –

答えて

1

オラクルは、複数の列を更新するための簡略版を提供しています。ただし、ステージング表の行を既存の表と照合する方法が必要です。

構文は次のようになります。

UPDATE EDRN_NEW.DATADIC dd 
    SET (FIELDLABELEDRN, ELEMENTID) = 
     (SELECT short_name, element_id 
      FROM edrn.md$$_all_data_elements ade 
      WHERE active_yn = 'YES' AND 
       ade.?? = dd.?? 
     ); 

しかし、あなたは行を一致させる方法のいくつかの並べ替えを必要とするので、あなたはade.?? = dd.??に詳細を入力する必要があります。

UPDATEINSERTを混同している可能性もあります。あなたはただこれをしたいですか?

INSERT INTO EDRN_NEW.DATADIC(FIELDLABELEDRN, ELEMENTID) 
     SELECT short_name, element_id 
     FROM edrn.md$$_all_data_elements ade 
     WHERE active_yn = 'YES' ; 
+0

いつも何か新しいことを学ぶ。この方法については知らなかった+1。 – sagi

+0

私はshort_name = field_labelでマッチすることができたと思っていましたが、「SQLエラー:ORA-01427:1行のサブクエリが複数の行を返します」という理由でこれを行うことはできません。 – phemor

+0

ただし、レコードが上手くいくので、私の作品は、ありがとう。 – phemor

関連する問題