복붙노트

[SQL] 내부 조인으로 삭제 PostgreSQL을

SQL

내부 조인으로 삭제 PostgreSQL을

DELETE B.* 
FROM   m_productprice B  
       INNER JOIN m_product C ON B.m_product_id = C.m_product_id 
WHERE  C.upc = '7094' AND B.m_pricelist_version_id = '1000020'

나는 다음과 같은 오류 PostgreSQL의 8.2.11을 얻고있다

ERROR:  syntax error at or near "B"
LINE 1: DELETE B.* from m_productprice B  INNER JOIN m_product C ON ...

내가주는 시도

DELETE B from m_productprice B  INNER JOIN m_product C ON B....
 ERROR:  syntax error at or near "B"

내가주는 시도

ERROR:  syntax error at or near "INNER"
LINE 1: DELETE from m_productprice B  INNER JOIN m_product C ON B.m_...

내 쿼리의 문제는 무엇인가?

해결법

  1. ==============================

    1.

    DELETE 
    FROM m_productprice B  
         USING m_product C 
    WHERE B.m_product_id = C.m_product_id AND
          C.upc = '7094' AND                 
          B.m_pricelist_version_id='1000020';
    

    또는

    DELETE 
    FROM m_productprice
    WHERE m_pricelist_version_id='1000020' AND 
          m_product_id IN (SELECT m_product_id 
                           FROM m_product 
                           WHERE upc = '7094'); 
    
  2. ==============================

    2.이것은 나를 위해 일한 :

    이것은 나를 위해 일한 :

    DELETE from m_productprice
    WHERE  m_pricelist_version_id='1000020'
           AND m_product_id IN (SELECT m_product_id
                                FROM   m_product
                                WHERE  upc = '7094'); 
    
  3. ==============================

    3.조인에 대한 포스트 그레스 9.1+와 작품은 USING 문에 공통 테이블 식을 결합되는 또 다른 형태.

    조인에 대한 포스트 그레스 9.1+와 작품은 USING 문에 공통 테이블 식을 결합되는 또 다른 형태.

    WITH prod AS (select m_product_id, upc from m_product where upc='7094')
    DELETE FROM m_productprice B
    USING prod C
    WHERE B.m_product_id = C.m_product_id 
    AND B.m_pricelist_version_id = '1000020';
    
  4. ==============================

    4.당신이 더 많은 경우 하나는 문을 사용하여 분리 쉼표를 사용할 수 있습니다 가입보다 :

    당신이 더 많은 경우 하나는 문을 사용하여 분리 쉼표를 사용할 수 있습니다 가입보다 :

    DELETE 
    FROM 
          AAA AS a 
    USING 
          BBB AS b,
          CCC AS c
    WHERE 
          a.id = b.id 
      AND a.id = c.id
      AND a.uid = 12345 
      AND c.gid = 's434sd4'
    

    참고

  5. ==============================

    5.단지 내부 조인과 함께, LEFT가 가입 또는 다른 떨어지게 하위 쿼리를 사용합니다 :

    단지 내부 조인과 함께, LEFT가 가입 또는 다른 떨어지게 하위 쿼리를 사용합니다 :

    DELETE FROM m_productprice
    WHERE m_product_id IN
    (
      SELECT B.m_product_id
      FROM   m_productprice  B
        INNER JOIN m_product C 
        ON   B.m_product_id = C.m_product_id
      WHERE  C.upc = '7094' 
      AND    B.m_pricelist_version_id = '1000020'
    )
    

    쿼리를 최적화하는,

  6. from https://stackoverflow.com/questions/11753904/postgresql-delete-with-inner-join by cc-by-sa and MIT license