[SQL] 나는 MS Access에서 SQL INTERSECT 및 MINUS 연산을 구현할 수있는 방법
SQL나는 MS Access에서 SQL INTERSECT 및 MINUS 연산을 구현할 수있는 방법
내가 연구하고 MS Access에서 INTERSECT 및 MINUS 연산을 실행하는 방법을 발견하지 않았습니다. 어떤 방식으로 존재 하는가
해결법
-
==============================
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.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.조인을 통해 그들은 완료됩니다. 옛날 방법 :
조인을 통해 그들은 완료됩니다. 옛날 방법 :
INTERSECT의 경우, 내부 조인 사용할 수 있습니다. 꽤 직설적 인. 당신이 가진 순수한 일대일 관계가 진행이없는 경우 그냥 GROUP BY를 사용할 필요가 또는 DISTINCT. 다른 언급 한대로 그렇지 않으면, 당신은 당신이 기대하는 것보다 더 많은 결과를 얻을 수 있습니다.
MINUS를 들어, LEFT JOIN을 사용하고 만 LEFT와 일치하지 않아도 메인 테이블에서 다시 행을 받고있어, 그래서 그것을 제한하는 곳은 테이블을 가입 할 수 있습니다.
쉬워요.
-
==============================
4.불행하게도 MINUS MS Access에서 지원되지 않습니다 - 한 가지 해결 방법은 세 가지 쿼리, 전체 데이터 세트 하나, 당신은 필터링 할 행을 끌어 하나, 왼쪽 두 테이블을 조인하는 세 번째를 작성하는 것입니다 만 기록을 끌어 만 전체 데이터 세트에서 존재한다.
불행하게도 MINUS MS Access에서 지원되지 않습니다 - 한 가지 해결 방법은 세 가지 쿼리, 전체 데이터 세트 하나, 당신은 필터링 할 행을 끌어 하나, 왼쪽 두 테이블을 조인하는 세 번째를 작성하는 것입니다 만 기록을 끌어 만 전체 데이터 세트에서 존재한다.
당신이 모두 존재 가입 내부 만 돌려 기록을 통해 그 일을 할 것을 제외하고 같은 일이, INTERSECT 간다.
-
==============================
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
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
'SQL' 카테고리의 다른 글
[SQL] 어떻게 3360에 3306에서 MySQL의 기본 포트를 변경하려면 (0) | 2020.05.24 |
---|---|
[SQL] C #에서 호출 SQL 정의 기능 (0) | 2020.05.24 |
[SQL] 정렬 첫번째 열 ASC하지만 NULL 값으로? (0) | 2020.05.24 |
[SQL] 여러 열에서 CHECK 제약 조건 (0) | 2020.05.24 |
[SQL] 여러 행의 마지막 삽입 된 ID를 가져 (0) | 2020.05.24 |