[sql] 다른 테이블을 기반으로 테이블의 모든 행 삭제

이 쿼리를 기억할 수없는 것 같습니다!

ID가 Table2와 동일한 table1의 모든 행을 삭제하고 싶습니다.

그래서:

DELETE table1 t1
 WHERE t1.ID = t2.ID

나는 WHERE ID IN (SELECT ID FROM table2)을 할 수 있다는 것을 알고 있지만 가능한 경우 JOIN을 사용 하여이 쿼리를 수행하고 싶습니다.



답변

DELETE Table1
FROM Table1
INNER JOIN Table2 ON Table1.ID = Table2.ID


답변

DELETE t1
FROM Table1 t1
JOIN Table2 t2 ON t1.ID = t2.ID;

우발적 인 것을 방지하기 때문에 항상 delete 문에서 별칭을 사용합니다.

DELETE Table1

전체 쿼리를 실행하기 전에 강조 표시하지 못할 때 발생합니다.


답변

ANSI SQL에는 삭제, AFAIK에서 조인을 사용하는 솔루션이 없습니다.

DELETE FROM Table1
WHERE Table1.id IN (SELECT Table2.id FROM Table2)

나중에 편집

다른 솔루션 (때로는 더 빠르게 수행됨) :

DELETE FROM Table1
WHERE EXISTS( SELECT 1 FROM Table2 Where Table1.id = Table2.id)


답변

PostgreSQL 구현은 다음과 같습니다.

DELETE FROM t1
USING t2
WHERE t1.id = t2.id;


답변

이 시도:

DELETE Table1
FROM Table1 t1, Table2 t2
WHERE t1.ID = t2.ID;

또는

DELETE Table1
FROM Table1 t1 INNER JOIN Table2 t2 ON t1.ID = t2.ID;


답변

이것을 해보면 조금 더 성능을 얻을 수 있다고 생각합니다

DELETE FROM Table1
WHERE EXISTS (
  SELECT 1
  FROM Table2
  WHERE Table1.ID = Table2.ID
)


답변

그러면 Table1기준과 일치하는 모든 행이 삭제됩니다 .

DELETE Table1
FROM Table2
WHERE Table1.JoinColumn = Table2.JoinColumn And Table1.SomeStuff = 'SomeStuff'