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