dude
그는 물었다 8년 전
163

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_...

내 쿼리하지 문제가 무엇입니까?

a_horse_with_no_name
그는 8년 전 댓글을 달았습니다
3

8.2? 업그레이드 합니다 해야한단말입니다. 이 버전은 더 이상 지원되지 않습니다. 그리고 제발 수작업식 읽습니다. '내부 조인' 기술서임을 삭제하시겠습니까 사용할 수 없다. http://www.postgresql.org/docs/8.2/static/sql-delete.html

dude
그는 8년 전 댓글을 달았습니다
0

대체 이 질의에서는 모든 내부 조인을 없이 실행하는 방법

a_horse_with_no_name
그는 8년 전 댓글을 달았습니다
0

예, 수작업으로 지켜보리니 there is an 정확히요 iqn.

답변 5 개

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'); 

Omesh
dude
그는 8년 전 댓글을 달았습니다
0

mysql 용 @0mesh 있다. sql 과 sql 포스트그레 캐비닛용입니다 내 정도다.

Omesh
그는 8년 전 댓글을 달았습니다
0

내 대답을 잡을라는데 업데이트되도록 게시물로의 바랍니다.

mgoldwasser
그는 6년 전 댓글을 달았습니다
12

첫 번째 대규모 테이블뿐 솔루션이므로 이 답이 잠재적으로 훨씬 빠릅니다.

Kostanos
그는 3년 전 댓글을 달았습니다
1

특히 첫 번째 최고의 오토메이티드 수 있기 때문에 여러 사람이 일치시킵니다 보다 작은 자연수이다.

이 협력했습니다 가져다줄래요:

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'); 

공통 결합 테이블을 사용하여 함께 사용할 수 있는 것은 다른 양식을 Postgres 9.1+ 표현식에서는 대한 기술서임을 참가하십시오.

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';

그냥 함께 사용하여 다른 내부 조인을 서브케리, 왼쪽 또는 떨어지게 된다.

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'
)

최적화합니다 쿼리하지

쉼표로 구분된 제표를 참가하십시오 사용하여 두 개 이상 있는 경우에는 사용할 수 있습니다.

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'

참고