내부 조인을 사용하여 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'
Postgre라는 에러가 표시됩니다.SQL 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_...
내 질문에 무슨 문제가 있나요?
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');
여러 조인(join)이 있는 경우 쉼표로 구분된 USING 문을 사용할 수 있습니다.
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'
이 방법은 효과가 있었습니다.
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+에서 동작하는 또 다른 형식은 조인용 USING 문과 Common Table Expression을 조합하는 것입니다.
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';
INSER JOIN, LEFT JOIN 또는 smth 이외의 서브쿼리를 사용합니다.
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'
)
쿼리를 최적화하려면
기본적으로 여기에 언급된 모든 것이 문서에 언급되어 있지만, 아무도 정확히 무엇을 명시하지 않았습니다.현재 (v15) 문서에서는 다음과 같이 기술되어 있습니다.
메모들
PostgreSQL을 사용하면 다른 테이블의 열을 참조할 수 있습니다.
WHERE
의 다른 테이블을 지정함으로써 조건을 설정합니다.USING
절을 클릭합니다.예를 들어, 특정 제작자가 제작한 모든 필름을 삭제하려면 다음을 수행할 수 있습니다.DELETE FROM films USING producers WHERE producer_id = producers.id AND producers.name = 'foo';
기본적으로 여기서 일어나고 있는 일은 영화와 제작자 간의 결합이며 성공적으로 합류한 모든 영화들은 삭제 대상으로 지정된다.이 구문은 표준이 아닙니다.보다 표준적인 방법은 다음과 같습니다.
DELETE FROM films WHERE producer_id IN (SELECT id FROM producers WHERE name = 'foo');
경우에 따라 조인 스타일은 하위 선택 스타일보다 쓰기가 더 쉽거나 실행 속도가 더 빠릅니다.
언급URL : https://stackoverflow.com/questions/11753904/postgresql-delete-with-inner-join
'programing' 카테고리의 다른 글
Windows 명령 프롬프트에서 .sh를 실행하는 방법은 무엇입니까? (0) | 2023.04.25 |
---|---|
iOS 13에서 검출 시트가 해제되었습니다. (0) | 2023.04.20 |
ASP의 기본 세션 타임아웃이란?인터넷? (0) | 2023.04.20 |
정적 라이브러리의 목표 C 카테고리 (0) | 2023.04.20 |
ASP.NET ID DbContext 혼동 (0) | 2023.04.20 |