[SQL] 다른 테이블을 기반으로 테이블의 모든 행을 삭제
SQL다른 테이블을 기반으로 테이블의 모든 행을 삭제
나는 지금이 쿼리를 기억할 수없는 것!
나는 그 ID의 표 2에서와 동일 표에서 모든 행을 삭제합니다.
그래서:
DELETE table1 t1
WHERE t1.ID = t2.ID
나는 ID IN (표 2 FROM SELECT ID)하지만 가능하면이 가입하여이 쿼리를 수행 할 WHERE 나는 할 수있어.
해결법
-
==============================
1.
DELETE Table1 FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.ID
-
==============================
2.
DELETE t1 FROM Table1 t1 JOIN Table2 t2 ON t1.ID = t2.ID;
그것은 사고를 방지 나는 항상 삭제 문에서 별칭을 사용
DELETE Table1
원인을 실행하기 전에 전체 쿼리를 강조하기 위해 실패합니다.
-
==============================
3.사용에 ANSI SQL의 해결책은 AFAIK, 삭제에이 조인되지 않습니다.
사용에 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)
-
==============================
4.PostgreSQL의 구현은 다음과 같습니다
PostgreSQL의 구현은 다음과 같습니다
DELETE FROM t1 USING t2 WHERE t1.id = t2.id;
-
==============================
5.이 시도:
이 시도:
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;
-
==============================
6.난 당신이 시도하는 경우가 조금 더 성능을 얻을 수 있다고 생각
난 당신이 시도하는 경우가 조금 더 성능을 얻을 수 있다고 생각
DELETE FROM Table1 WHERE EXISTS ( SELECT 1 FROM Table2 WHERE Table1.ID = Table2.ID )
-
==============================
7.이 기준과 일치 표에서 모든 행을 삭제합니다 :
이 기준과 일치 표에서 모든 행을 삭제합니다 :
DELETE Table1 FROM Table2 WHERE Table1.JoinColumn = Table2.JoinColumn And Table1.SomeStuff = 'SomeStuff'
-
==============================
8.이 링크가 유용하다고
이 링크가 유용하다고
거기에서 복사
때때로, 하나는 다른 테이블의 기준에 따라 테이블에서 일부 레코드를 삭제하려고합니다. 어떻게 두 테이블의 레코드를 제거하지 않고 해당 테이블 중 하나를 삭제합니까?
DELETE DeletingFromTable FROM DeletingFromTable INNER JOIN CriteriaTable ON DeletingFromTable.field_id = CriteriaTable.id WHERE CriteriaTable.criteria = "value";
열쇠는 당신이 테이블의 이름을 선택하면 삭제를 지정할 것입니다. 그래서,이 가입하고, 선택과 제한을 WHERE 삭제는 삭제를 수행하면서. 당신은하지만, 하나의 테이블에 국한되지 것입니다. 당신은 당신이 구독자를 제거하고 (예, 잡지 및 구독자 구독 합류를 위해) 다 대다 관계가있는 경우, 당신은이 아니라 모델을 결합에서 잠재적 인 레코드를 제거해야합니다.
DELETE subscribers, subscriptions FROM subscribers INNER JOIN subscriptions ON subscribers.id = subscriptions.subscriber_id INNER JOIN magazines ON subscriptions.magazine_id = magazines.id WHERE subscribers.name='Wes';
A를 삭제 기록은 가입도 LEFT와 함께 할 수있는 가입하고 조인 된 테이블이 NULL의 경우는 WHERE 그래서 당신은 관계를 추가하기위한 준비에 같이 (일치하지 않았다 하나 개의 테이블에서 레코드를 제거 할 수 있음을 볼 수 있습니다. ) 예 와서 게시 할 수 있습니다.
-
==============================
9.영업 이익이 특정의 DB를 요구하지 않기 때문에, 더 나은 표준을 준수 문을 사용합니다. 만 MERGE는 대상 테이블에 뭔가에 합류하면서 행을 삭제 (또는 갱신)에 대한 SQL 표준입니다.
영업 이익이 특정의 DB를 요구하지 않기 때문에, 더 나은 표준을 준수 문을 사용합니다. 만 MERGE는 대상 테이블에 뭔가에 합류하면서 행을 삭제 (또는 갱신)에 대한 SQL 표준입니다.
merge table1 t1 using ( select t2.ID from table2 t2 ) as d on t1.ID = d.ID when matched then delete;
MERGE는 DELETE와 들키지 수 있습니다 ... 일부 오류의 경우에서 보호하는 의미 엄격한 있습니다. 이 경기의 '고유성'을 적용 : 소스 (사용하여 내부의 문)에있는 많은 행이 대상에 동일한 행 일치하는 경우, 병합을 취소해야하며 오류는 SQL 엔진에 의해 제기해야합니다.
-
==============================
10.참조 MSDN T-SQL DELETE (예 D) :
참조 MSDN T-SQL DELETE (예 D) :
DELETE FROM Table1 FROM Tabel1 t1 INNER JOIN Table2 t2 on t1.ID = t2.ID
-
==============================
11.다른 테이블을 기반으로 테이블 레코드를 삭제하는 방법
다른 테이블을 기반으로 테이블 레코드를 삭제하는 방법
Delete From Table1 a,Table2 b where a.id=b.id Or DELETE FROM Table1 WHERE Table1.id IN (SELECT Table2.id FROM Table2) Or DELETE Table1 FROM Table1 t1 INNER JOIN Table2 t2 ON t1.ID = t2.ID;
-
==============================
12.이 오래된 I를 알고 있지만 참조 엉덩이이 사용하는 모든 단지 포인터입니다. 난 그냥이 시도하고 당신은 오라클을 사용하는 경우, DELETE 문에서 작동하지 않습니다 가입하세요. 당신은 다음과 같은 메시지가 :
이 오래된 I를 알고 있지만 참조 엉덩이이 사용하는 모든 단지 포인터입니다. 난 그냥이 시도하고 당신은 오라클을 사용하는 경우, DELETE 문에서 작동하지 않습니다 가입하세요. 당신은 다음과 같은 메시지가 :
ORA-00933 : SQL이 제대로 종료되지 명령을 실행합니다.
-
==============================
13.영업 이익은 Ankur 굽타에 대한 응답으로, 문 '에'는를 사용하지 않지만, 이것은 내가 많은 관계로 하나의 다른 테이블에 존재하지 않는 한 테이블의 레코드를 삭제할 수있는 가장 쉬운 방법이었다 :
영업 이익은 Ankur 굽타에 대한 응답으로, 문 '에'는를 사용하지 않지만, 이것은 내가 많은 관계로 하나의 다른 테이블에 존재하지 않는 한 테이블의 레코드를 삭제할 수있는 가장 쉬운 방법이었다 :
DELETE FROM Table1 as t1 WHERE ID_Number NOT IN (SELECT ID_Number FROM Table2 as t2)
나를 위해, 액세스 2016 년 마법처럼 일했다.
-
==============================
14.나는 종종 다음과 같은 만들어 낸 예를 들어 같은 일을한다. (이 예는 인포믹스 SE 리눅스에서 실행됩니다.)
나는 종종 다음과 같은 만들어 낸 예를 들어 같은 일을한다. (이 예는 인포믹스 SE 리눅스에서 실행됩니다.)
이 예제의 포인트는 모든 부동산 면제 / 감면 거래 기록을 삭제하는 것입니다 - 저감 응용 프로그램이 버그를 가지고 있기 때문에 - REAL_ESTATE 테이블의 정보를 기반으로.
이 경우 last_update에서! = nullmeans 계정이 폐쇄되지 않으며, res_exempt! = 'P'는 계정은 개인 재산 (상용 장비 / 가구)되지 않습니다.
delete from trans where yr = '16' and tran_date = '01/22/2016' and acct_type = 'r' and tran_type = 'a' and bill_no in (select acct_no from real_estate where last_update is not null and res_exempt != 'p');
나는이 방법처럼, 필터링 기준이 있기 때문에 - 나를 위해 적어도 - 쿼리를 작성하는 동안 읽기, 나는 그것을보고 내가 무슨 생각 궁금 할 때 지금부터 몇 달을 이해하는 것이 더 쉽습니다.
-
==============================
15.
delete table1 from t2 where table1.ID=t2.ID
MSSQL에 작품
from https://stackoverflow.com/questions/1590799/delete-all-rows-in-a-table-based-on-another-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] NVARCHAR (최대) 아직 잘리지 (0) | 2020.04.04 |
---|---|
[SQL] 서브 쿼리가 존재합니다 도입되지 않은 경우 하나 개의 표현이 선택 목록에 지정할 수 있습니다 (0) | 2020.04.04 |
[SQL] 엑셀 VBA에서 액세스 SQL 데이터베이스 (0) | 2020.04.03 |
[SQL] MySQL은 - 어떻게 "0"전면 패드의 우편 번호에? (0) | 2020.04.03 |
[SQL] 어떻게 MySQL의 테이블에 사용자 정의 CHECK 제약 조건을 추가하는 방법은 무엇입니까? (0) | 2020.04.03 |