복붙노트

[SQL] 나는 MS Access에서 SQL INTERSECT 및 MINUS 연산을 구현할 수있는 방법

SQL

나는 MS Access에서 SQL INTERSECT 및 MINUS 연산을 구현할 수있는 방법

내가 연구하고 MS Access에서 INTERSECT 및 MINUS 연산을 실행하는 방법을 발견하지 않았습니다. 어떤 방식으로 존재 하는가

해결법

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

    1.INTERSECT는 내부 조인이다. MINUS는 다른 테이블에 존재하지 않는 레코드 만 선택할 경우 외부가 참여한다. INTERSECT

    INTERSECT는 내부 조인이다. MINUS는 다른 테이블에 존재하지 않는 레코드 만 선택할 경우 외부가 참여한다. INTERSECT

    select distinct
      a.*
    from
      a
      inner join b on a.id = b.id
    

    마이너스

    select distinct
      a.*
    from
      a
      left outer join b on a.id = b.id
    where
      b.id is null
    

    당신은 다음 몇 가지 샘플 데이터를 원래의 질문을 편집하고 게시 할 경우 예 부여 할 수 있습니다.

    편집은 : 쿼리에 별개로 추가 잊으.

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

    2.INTERSECT는 가입 내부 아닙니다. 그들은 다르다. 내부는 경우에 당신이 어디에 INTERSECT하지 않습니다를 중복 행을 줄 것이다 가입하세요. 당신은에 의해 동등한 결과를 얻을 수 있습니다 :

    INTERSECT는 가입 내부 아닙니다. 그들은 다르다. 내부는 경우에 당신이 어디에 INTERSECT하지 않습니다를 중복 행을 줄 것이다 가입하세요. 당신은에 의해 동등한 결과를 얻을 수 있습니다 :

    SELECT DISTINCT a.*
    FROM a
    INNER JOIN b
       on a.PK = b.PK
    

    PK가 기본 키 열 또는 열을해야합니다. (! BAD) 테이블에는 PK가없는 경우, 당신은 너무 좋아 작성해야합니다 :

    SELECT DISTINCT a.*
    FROM a
    INNER JOIN b
       ON  a.Col1 = b.Col1
       AND a.Col2 = b.Col2
       AND a.Col3 = b.Col3 ...
    

    MINUS, 당신은 같은 일을하지만, 왼쪽으로 가입하고, 할 수있는 WHERE 테이블 B의 nullable이 아닌 열 중 하나 (바람직하게는 기본 키)에 널 (null) 검사 조건.

    SELECT DISTINCT a.*
    FROM a
    LEFT JOIN b
       on a.PK = b.PK
    WHERE b.PK IS NULL
    

    그게해야한다.

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

    3.조인을 통해 그들은 완료됩니다. 옛날 방법 :

    조인을 통해 그들은 완료됩니다. 옛날 방법 :

    INTERSECT의 경우, 내부 조인 사용할 수 있습니다. 꽤 직설적 인. 당신이 가진 순수한 일대일 관계가 진행이없는 경우 그냥 GROUP BY를 사용할 필요가 또는 DISTINCT. 다른 언급 한대로 그렇지 않으면, 당신은 당신이 기대하는 것보다 더 많은 결과를 얻을 수 있습니다.

    MINUS를 들어, LEFT JOIN을 사용하고 만 LEFT와 일치하지 않아도 메인 테이블에서 다시 행을 받고있어, 그래서 그것을 제한하는 곳은 테이블을 가입 할 수 있습니다.

    쉬워요.

  4. ==============================

    4.불행하게도 MINUS MS Access에서 지원되지 않습니다 - 한 가지 해결 방법은 세 가지 쿼리, 전체 데이터 세트 하나, 당신은 필터링 할 행을 끌어 하나, 왼쪽 두 테이블을 조인하는 세 번째를 작성하는 것입니다 만 기록을 끌어 만 전체 데이터 세트에서 존재한다.

    불행하게도 MINUS MS Access에서 지원되지 않습니다 - 한 가지 해결 방법은 세 가지 쿼리, 전체 데이터 세트 하나, 당신은 필터링 할 행을 끌어 하나, 왼쪽 두 테이블을 조인하는 세 번째를 작성하는 것입니다 만 기록을 끌어 만 전체 데이터 세트에서 존재한다.

    당신이 모두 존재 가입 내부 만 돌려 기록을 통해 그 일을 할 것을 제외하고 같은 일이, INTERSECT 간다.

  5. ==============================

    5.나는이 하나가 MINUS를 수행 믿는다

    나는이 하나가 MINUS를 수행 믿는다

    SELECT DISTINCT
      a.CustomerID, 
      b.CustomerID
    FROM 
      tblCustomers a
    LEFT JOIN 
      [Copy Of tblCustomers] b
    ON
      a.CustomerID = b.CustomerID
    WHERE
      b.CustomerID IS NULL
    
  6. from https://stackoverflow.com/questions/337158/how-can-i-implement-sql-intersect-and-minus-operations-in-ms-access by cc-by-sa and MIT license