복붙노트

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

SQL

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

나는 지금이 쿼리를 기억할 수없는 것!

나는 그 ID의 표 2에서와 동일 표에서 모든 행을 삭제합니다.

그래서:

DELETE table1 t1
 WHERE t1.ID = t2.ID

나는 ID IN (표 2 FROM SELECT ID)하지만 가능하면이 가입하여이 쿼리를 수행 할 WHERE 나는 할 수있어.

해결법

  1. ==============================

    1.

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

    2.

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

    그것은 사고를 방지 나는 항상 삭제 문에서 별칭을 사용

    DELETE Table1 
    

    원인을 실행하기 전에 전체 쿼리를 강조하기 위해 실패합니다.

  3. ==============================

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

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

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

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

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

    6.난 당신이 시도하는 경우가 조금 더 성능을 얻을 수 있다고 생각

    난 당신이 시도하는 경우가 조금 더 성능을 얻을 수 있다고 생각

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

    7.이 기준과 일치 표에서 모든 행을 삭제합니다 :

    이 기준과 일치 표에서 모든 행을 삭제합니다 :

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

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

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

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

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

    12.이 오래된 I를 알고 있지만 참조 엉덩이이 사용하는 모든 단지 포인터입니다. 난 그냥이 시도하고 당신은 오라클을 사용하는 경우, DELETE 문에서 작동하지 않습니다 가입하세요. 당신은 다음과 같은 메시지가 :

    이 오래된 I를 알고 있지만 참조 엉덩이이 사용하는 모든 단지 포인터입니다. 난 그냥이 시도하고 당신은 오라클을 사용하는 경우, DELETE 문에서 작동하지 않습니다 가입하세요. 당신은 다음과 같은 메시지가 :

    ORA-00933 : SQL이 제대로 종료되지 명령을 실행합니다.

  13. ==============================

    13.영업 이익은 Ankur 굽타에 대한 응답으로, 문 '에'는를 사용하지 않지만, 이것은 내가 많은 관계로 하나의 다른 테이블에 존재하지 않는 한 테이블의 레코드를 삭제할 수있는 가장 쉬운 방법이었다 :

    영업 이익은 Ankur 굽타에 대한 응답으로, 문 '에'는를 사용하지 않지만, 이것은 내가 많은 관계로 하나의 다른 테이블에 존재하지 않는 한 테이블의 레코드를 삭제할 수있는 가장 쉬운 방법이었다 :

    DELETE
    FROM Table1 as t1
    WHERE ID_Number NOT IN
    (SELECT ID_Number FROM Table2 as t2)
    

    나를 위해, 액세스 2016 년 마법처럼 일했다.

  14. ==============================

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

    15.

    delete
        table1
    from 
        t2
    where
        table1.ID=t2.ID
    

    MSSQL에 작품

  16. from https://stackoverflow.com/questions/1590799/delete-all-rows-in-a-table-based-on-another-table by cc-by-sa and MIT license