2011-02-08 18 views
2

CSVファイルのデータを意味のあるウェアハウステーブルに格納する3つのテーブルからデータを挿入しようとしていますが、構文が正しいかどうかわかりません。それはこのようなものに見えるよう複数のテーブルから挿入

insert into warehouseTBL 
select a.recordNum, b.fieldA, b.fieldB, c.fieldC, c.fieldD, 
    from ctrTable a, tableB b, tableC c 
where a.recordNum = b.recordNum 
    and a.recordNum = c.recordNum 
    and a.someField = b.someField 
    and a.someField = c.someField 

は、だから私は、FROM句でネストされたSELECTを使用する必要があります。

from ctrTable a, (
     select * 
      from tableB, tableC, 
     where tableB.recNum = tableC.recNum 
     ) as d, 
where a.recNum  = d.recNum 

を構文でも理にかなっていますか?

+0

、行を挿入するには、このクエリを使用します。 – zerkms

+2

構文はOKですが、1)insertテーブルのカラムを明示的に "insert into warehouseTBL(recordnum、fieldA、fieldB ...)"し、2)ANSIジョインをctrTableから選択して使用することが望ましいです – StuartLC

+0

@zerkms:最初のステートメントはOracleエラーを生成しませんでしたが、warehouseTBLにユニークなインデックスを作成することはできません。私はOracleのタグを削除しました。なぜなら、これはSQLの構文上の問題だからです。 – MooCow

答えて

4

は、問題のそれぞれのOracleエラーを入れ

insert into warehouseTBL 
select recordNum, fieldA, fieldB, fieldC,fieldD from 
(select a.recordNum, b.fieldA, b.fieldB, c.fieldC, c.fieldD, 
    from ctrTable a, tableB b, tableC c 
where a.recordNum = b.recordNum 
    and a.recordNum = c.recordNum 
    and a.someField = b.someField 
    and a.someField = c.someField)p 
+0

私は 'select * fields from ctrTbl c、(select * fields from tblA a、tblB bここでa.recNum = b.recNum AND a.area = b.area)dとします。ここでc.recNum = d.recNum AND c。 area = d.area'はうまくいくでしょうか? – MooCow

+0

あなたの質問にあなたが投稿したのと同じことを意味するものではありません。 –

関連する問題