programing

Oracle sql 쿼리에서 "Join"을 사용하여 삭제

starjava 2023. 3. 8. 20:32
반응형

Oracle sql 쿼리에서 "Join"을 사용하여 삭제

Oracle SQL Query에 대해 잘 모르기 때문에 다른 (조인) 테이블의 필드를 포함하는 제약을 충족해야 하는 테이블에서 일부 행을 삭제하는 데 문제가 있습니다.즉, JOIN을 포함한 행을 삭제하는 쿼리를 작성하고 싶습니다.

저 같은 경우에는 테이블이 있습니다.ProductFilters및 다른 테이블Products필드에서의 결합.ProductFilters.productID = Products.ID. 행을 삭제합니다.ProductFilters가지고 있다ID200보다 크거나 같으며, 그들이 참조하는 제품의 이름은 '마크'입니다(이름은 제품의 필드입니다).

Oracle의 Delete Query에서 JOIN이 가능한지 여부를 먼저 알려주시기 바랍니다.이 쿼리가 기능하도록 수정하지 않으면 해당 양식에서 오류가 발생하므로 이 쿼리를 어떻게 수정해야 합니까?

DELETE From PRODUCTFILTERS pf 
where pf.id>=200 
And pf.rowid in 
(
     Select rowid from PRODUCTFILTERS 
     inner join PRODUCTS on PRODUCTFILTERS.PRODUCTID = PRODUCTS.ID 
     And PRODUCTS.NAME= 'Mark'
);       

최근에 다음 구문을 배웠습니다.

DELETE (SELECT *
        FROM productfilters pf
        INNER JOIN product pr
            ON pf.productid = pr.id
        WHERE pf.id >= 200
            AND pr.NAME = 'MARK')

다른 제안 코드보다 훨씬 깨끗해 보이는 것 같아요.

위의 코멘트에서 링크한 답변에 따르면 다음과 같습니다.

delete from
(
select pf.* From PRODUCTFILTERS pf 
where pf.id>=200 
And pf.rowid in 
  (
     Select rowid from PRODUCTFILTERS 
     inner join PRODUCTS on PRODUCTFILTERS.PRODUCTID = PRODUCTS.ID 
     And PRODUCTS.NAME= 'Mark'
  )
); 

또는

delete from PRODUCTFILTERS where rowid in
(
select pf.rowid From PRODUCTFILTERS pf 
where pf.id>=200 
And pf.rowid in 
  (
     Select PRODUCTFILTERS.rowid from PRODUCTFILTERS 
     inner join PRODUCTS on PRODUCTFILTERS.PRODUCTID = PRODUCTS.ID 
     And PRODUCTS.NAME= 'Mark'
  )
); 

where 구에는 서브쿼리를 사용합니다.삭제 쿼리의 Join 재요구의 경우 이 예에서는 조인된 테이블 "docx_document"에서 일치하지 않고 "docs_documents" 테이블에서 작성 날짜가 120일 이상인 행을 삭제합니다.

delete from docs_documents d
where d.id in (
    select a.id from docs_documents a
    left join docx_document b on b.id = a.document_id
    where b.id is null
        and floor(sysdate - a.create_date) > 120
 );

저는 개인적으로EXISTS건설하다.Web 페이지의 예에 기재되어 있는 바와 같이

DELETE ProductFilters pf
WHERE EXISTS (
   SELECT *
   FROM Products p
   WHERE p."productID"=pf."productID"
   AND p.NAME= 'Mark'
)
AND pf."id">=200;

하위 쿼리를 사용하십시오.

delete from productfilters
where productid in (Select id from products where name='Mark') and Id>200;

언급URL : https://stackoverflow.com/questions/12672082/delete-with-join-in-oracle-sql-query

반응형