>

4 개의 테이블을 조인하여 SQL 테이블을 업데이트하려고하는데 아래에 쿼리가 있습니다

UPDATE DC 
SET M_CA_PRO_ELG  = CPTY_UDF.M_CA_PRO_ELG
FROM COMD_TABLE DC
JOIN EXT_TABLE TRN_EXT ON DC.M_NB = TRN_EXT.M_REF
JOIN HDR_TABLE TRN_HDR ON TRN_EXT.M_TR_REF = TRN_HDR.M_NB 
JOIN CPDF_TABLE CPDF ON TRN_HDR.M_COUNTRPART= CPDF.M_ID
JOIN COUNTERP_TABLE CPTY_UDF ON CPDF.M_LBL=CPTY_UDF.M_LBL 
WHERE TRN_HDR.M_STATUS <> 'FISHING'

아래 오류가 발생했습니다

Error report: SQL Error: ORA-00933: SQL command not properly ended 00933. 00000 - "SQL command not properly ended"

업데이트 1 : 01407에 따르면이 버전도 작동하지 않습니다. 00000- "(% s)을 (를) NULL로 업데이트 할 수 없습니다."선택에 null 값이 전혀 없습니다

update COMD_TABLE DC SET DC.M_CA_PRO_ELG = 
(
  select CPTY_UDF.M_CA_PRO_ELG  from COUNTERP_TABL CPTY_UDF,EXT_TABLE TRN_EXT,HDR_TABLE TRN_HDR ,CPDF_TABLE CPDF
  where DC.M_NB = TRN_EXT.M_REF and  TRN_EXT.M_TR_REF = TRN_HDR.M_NB  and TRN_HDR.M_COUNTRPART= CPDF.M_ID and CPDF.M_LBL=CPTY_UDF.M_LBL 
  and  TRN_HDR.M_STATUS <> 'FISHING'
)

업데이트 2 :

WITH CA_PROVINCE_DATA AS 
(
 SELECT CPTY_UDF.M_CA_PRO_ELG AS CA_PRO ,DC.M_NB AS M_NB   
 FROM EXT_TABLE 
 JOIN HDR_TABLE TRN_HDR ON TRN_EXT.M_TR_REF = TRN_HDR.M_NB 
 JOIN CPDF_TABLE CPDF ON TRN_HDR.M_COUNTRPART= CPDF.M_ID
 JOIN COUNTERP_TABLE CPTY_UDF ON CPDF.M_LBL=CPTY_UDF.M_LBL 
 WHERE TRN_HDR.M_STATUS <> 'FISHING'
)
 UPDATE COMD_TABLE SET M_CA_PRO_ELG = CA_PROVINCE_DATA.CA_PRO WHERE 
 M_NB= CA_PROVINCE_DATA.M_NB

이 쿼리는 ORACLE에서 유효합니까, 아니면이를 달성 할 수있는 다른 방법이 있습니까?

도움을 주셔서 감사합니다

감사합니다

  • 답변 # 1

    1.

    update ( select sal, new_sal
         from SCOTT.EMP o
         join ( select empno, sal/10 as new_sal
                from scott.emp ) n
          on (o.empno = n.empno) )
    set sal = new_sal;
    
    

    2.

    merge into SCOTT.EMP o
    using ( select empno, sal/10 as new_sal
         from scott.emp ) i 
     on ( o.empno = i.empno )
    when matched then update
     set o.sal = i.new_sal;
    
    

  • 답변 # 2

    나에게 SQL Server 업데이트 인 것 같습니다. 내가 좋아하는 SQL Server의 기능. 찾고있는 Oracle 업데이트는 다음과 같습니다. 모든 레코드를 업데이트하려면 '현재 위치'부분을 생략하십시오.

    UPDATE dc
       SET m_ca_pro_elg   =
               (SELECT cpty_udf.m_ca_pro_elg
                  FROM ext_table  trn_ext
                       JOIN hdr_table trn_hdr ON trn_ext.m_tr_ref = trn_hdr.m_nb
                       JOIN cpdf_table cpdf ON trn_hdr.m_countrpart = cpdf.m_id
                       JOIN counterp_table cpty_udf
                           ON cpdf.m_lbl = cpty_udf.m_lbl
                 WHERE dc.m_nb = trn_ext.m_ref AND trn_hdr.m_status <> 'FISHING')
     WHERE EXISTS
               (SELECT NULL
                  FROM ext_table  trn_ext
                       JOIN hdr_table trn_hdr ON trn_ext.m_tr_ref = trn_hdr.m_nb
                       JOIN cpdf_table cpdf ON trn_hdr.m_countrpart = cpdf.m_id
                       JOIN counterp_table cpty_udf
                           ON cpdf.m_lbl = cpty_udf.m_lbl
                 WHERE dc.m_nb = trn_ext.m_ref AND trn_hdr.m_status <> 'FISHING')
    
    

관련 자료

  • 이전 java - Google Maps API에 어떤 문제가 있습니까?
  • 다음 javascript - angular 4 - 반응 형에서 라디오 버튼이 선택되었는지 확인