복붙노트

[SQL] 의 가입 사용할 때 어떻게 MS Access에서 삭제?

SQL

의 가입 사용할 때 어떻게 MS Access에서 삭제?

나는 또한이 JOIN 절을 사용하는 경우 MS Access에서 DELETE 절을 사용하여 문제를 시도하고있다. 나는 이것이 DISTINCTROW 키 단어를 사용하여 수행 할 수 있습니다 알 수 있습니다.

예를 들어, 다음 SQL 문은 삭제를 허용하지 않습니다

DELETE Table1.*
FROM Table1 INNER JOIN Table2 ON Table1.Name=Table2.Name;

그러나이 문을 수행합니다

DELETE DISTINCTROW Table1.*
FROM Table1 INNER JOIN Table2 ON Table1.Name=Table2.Name;

해결법

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

    1.

    Delete Table1.*
    From Table1
    Where Exists( Select 1 From Table2 Where Table2.Name = Table1.Name ) = True
    

    모호한 결과를 만들 수 있습니다 특히 때문에 내 대답에 확장하려면, 공식 SQL 사양 사용을 제공하지 않는 행동 쿼리에 조인. 따라서, 더 나은 (및 액세스가 훨씬 더 행복하다) 당신이 여기 가지고있는 것처럼 실행 쿼리에 조인 사용하지 않도록 할 수 있습니다. 액세스 DISTINCTROW를 원하는 이유는 그것이이 표 행하므로 액세스가 혼동됩니다 (즉, 여러 관련 표 2에서 행이)의 중복을 만들 것 두 테이블 사이에 가입 가능성이 있다는 것입니다. 나는 또한 당신이 가입 사용하려고하고 기본 키가없는 경우 액세스가 보크 것을 발견했습니다. 일반적으로, 당신이 할 수있는 경우는 실행 쿼리에 참여하지 않도록하는 것이 좋습니다.

  2. ==============================

    2.하나의 문제는 알고 있어야합니다 :이 테이블 / 쿼리 별칭과 함께 작업을하지 않습니다!

    하나의 문제는 알고 있어야합니다 :이 테이블 / 쿼리 별칭과 함께 작업을하지 않습니다!

    DELETE a.*
    from tblA as A
    where exists (select 1 from tblB as B where a.id=b.id)
    

    삭제 ALL은 TBLA에 기록! 같은 결과 (액세스 2010) - 나는 그것이 별도 테이블 및 TLB에 대한 별칭을 사용했습니다.

    (나는 종종 삭제하기 전에 사용하는)뿐만 아니라 SELECT로 발생 ...

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

    3.

    DELETE a.*
    FROM tblA AS A
    WHERE EXISTS (SELECT 1 FROM tblB AS B WHERE a.id=b.id)
    

    이 시도

    DELETE tblA 
    FROM tblB  
    WHERE EXISTS (SELECT * FROM tblA AS A,tblB AS B WHERE A.id=B.id)
    
  4. from https://stackoverflow.com/questions/5585732/how-to-delete-in-ms-access-when-using-joins by cc-by-sa and MIT license