Q&A

  • table3의 열을 table1의 행으로....insert하기
table2의 행의 값들과 table3의 열값들을 table1의 행으로...insert 하려고 합니다...
***table3의 구조
field1         field2         field3          field4
111             01             5000           151
111             02              0               151  
111             03              1100           151
111             04              0                151
111             05              0                 151

***table2의 구조
field1         field2          field3              field4                  field5  
111             aaa           888-999           151                     44444

table2의 한 field에 연관된 값들이... table1에 5줄씩 있습니다...
이데이타들을 table1에 넣으려고 하는데여
table2의 값들을 넣는건 문제가 되지 않습니다...
한행을 넣어 주는거니까여...
근데 table3의 열들을 table1의 행에 넣어 주려고 합니다...
예를 들어
*********table1에 insert시킬 값들...
field1                                 field2 (table2.field2 = 01)                              
table2의 field1(111)              table3.field3의 첫번째 값(5000)

field3 (table2.field2 = 02)                field4  (table2.field2 = 03)  
table3.field3의 두번째 값(0)      table3.field3의 세번째 값(1100)
    
        field5 (table2.field2 = 04)                field6  (table2.field2 = 05)  
table3.field3의 네번째 값(0)      table3.field3의 다섯번째 값(0)

field7
table2.field3(888-999)
            
이렇게여... 어떻해 넣어 줘야 하져???
table3의 값들을 모두 select해서 가져와설랑은..
그 값들을 필요한것만 배열등에 넣어 줄수 있나여??
넣을 수 있다면 어떻게 어떤 방법들이 있나여??
ㅡㅡ; 도와주세염~ 고수님들~~~~~~~
1  COMMENTS
  • Profile
    정성훈 2002.10.16 03:49
    1.조인문을 쓰시던가 아님 루핑돌리시면 될것 같은데요...
    어떤 DB를 쓰시는지 몰라 MS-SQL 로 했습니다
    ORACLE 쓰신다면
      LEFT OUTER JOIN TABLE3 B
        ON ((A.FIELD1 = B.FIELD1)
        AND (B.FIELD2 = '01'))

    저 문장 대신에

    WHERE A.FIELD1 *= B.FIELD1
          AND B.FIELD2 = '01'
    이렇게 하시면 되구요..
    담부턴 DB를 써주시는게 예의일듯...


    SELECT A.FIELD1
                ,A.FIELD3          
                ,B.FIELD3
                ,C.FIELD3
                ,D.FIELD3
                ,E.FIELD3
                ,F.FIELD3
      FROM TABLE2 A
      LEFT OUTER JOIN TABLE3 B
        ON ((A.FIELD1 = B.FIELD1)
        AND (B.FIELD2 = '01'))
      LEFT OUTER JOIN TABLE3 C
        ON ((A.FIELD1 = C.FIELD1)
        AND (C.FIELD2 = '01'))
      LEFT OUTER JOIN TABLE3 D
        ON ((A.FIELD1 = D.FIELD1)
        AND (D.FIELD2 = '01'))
      LEFT OUTER JOIN TABLE3 E
        ON ((A.FIELD1 = E.FIELD1)
        AND (E.FIELD2 = '01'))
      LEFT OUTER JOIN TABLE3 F
        ON ((A.FIELD1 = F.FIELD1)
        AND (F.FIELD2 = '01'))
    WHERE A.FIELD1 = '111'          
                

    2. 루핑을 돌린다면.. 더 편할것 같은데요?
    var
       iCnt : Integer;
       sQuery : String;
    begin  

    with Query1 do
    begin
       Close;
       SQL.Clear;
       SQL.Add( 'SELECT FIELD2, FIELD3 FROM TABLE3' );
       SQL.Add( ' WHERE FIELD1 = ''111''                       ' );
    이렇게 가져온값을..
       Open;
       First;
       ICnt := 1;

       while not EOF do
       begin
          if iCnt = FieldByName( 'field2' ).AsInteger then
           begin
               sQuery := sQuery + 'field' + IntToStr( iCnt + 1)  + ' = ' + '''' + FieldByName( 'Field2' ).AsString + '''';
           end;

           if not EOF then
           begin
              sQuery := sQuery + ',';
               Inc( iCnt );
           end;
           Next;
       end;

       //=====삽입 쿼리.
       with Query1 do
       begin
           Close;
           SQL.Add( 'insert into table1 ( 'field1', ...... );
           SQL.Add( sQuery );
           .....
           ExecSQL;
       end;
      
    end;