2017-11-26 3 views
0

3 개의 다른 결과 집합이 나오기 위해 5 개의 테이블을 조인하려고합니다.SQL 조인 5 테이블 - 포함 및 제외

내 테이블은 다음과 같습니다

  1. 고객 - 이메일 주소 (고유 ID), 이메일 주소, 도메인 이름을 포함, 계정 이름, 인구 통계 학적 정보 등 (고객)
  2. 제품 1 개 고객 계정 이름 (Product1Accounts)
  3. 제품 1 개 고객의 이메일 주소 도메인 이름 (Product1Domains)
  4. 제품이 고객의 계정 이름 (Product2Accounts)
  5. 제품이 고객의 이메일 주소 도메인 이름 (생산성 uct2Domains)

내가 필요로하는 3 개 결과는 다음과 같습니다

  1. 제품 (1 개) 고객을 제외한 제품이 개 고객
  2. 제품이 개 고객을 제외한 제품 1 개 고객
  3. 두 제품 1의 고객과 2

사이드 노트 : 각 제품의 고객은 계정 OR 도메인 이름으로 식별 할 수 있습니다.

내가 테이블 1,2,3 또는 1,4,5에 일치을 마련하려면 다음을 만들 수 있지만이 제외를 통합하는 방법에 끊었 무엇입니까

SELECT * 
FROM Customers 
INNER JOIN Product1Accounts 
ON Customers.Company=Product1Accounts.Account 
UNION 
SELECT * 
FROM Customers 
INNER JOIN Product1Domains 
on Customers.Email_Address_Domain=Product1Domains.Domain 

나는 또한 해요 확실하지 않은 세 번째 결과 집합을 얻으려면 내가 찾고 있어요 ...이 코드를 더 잘 작성하는 방법에 대한 조언이나 조언을 부탁드립니다.

+1

[tag : rdbms]는 무엇을 사용하고 있습니까? – Mureinik

+0

SQL Server Express 2017/SQL Server Management Studio –

답변

0

세 번째 결과로 Product2 테이블에 대한 추가 결과를 얻으려면 UNION을 계속 추가 할 수 있습니다 (실제로는 데이터베이스를 정규화해야 함).

처음 두 결과의 경우 EXCEPT 키워드가 작동해야합니다. SQL Express는 작동하지 않으므로 SQL Server 버전에서 사용할 수 있는지 확실하지는 않습니다. 나는 당신의 데이터베이스 구조, 당신은이 개 제품이 개 다른 테이블을 가지고있다 정확하지 않은 생각

(
SELECT C.Company 
FROM Customers C 
INNER JOIN Product1Accounts PA ON PA.Account = C.Company 
UNION 
SELECT C.Company 
FROM Customers C 
INNER JOIN Product1Domains PD ON PD.Domain = C.Email_Address_Domain 
) 
EXCEPT 
(
SELECT C.Company 
FROM Customers C 
INNER JOIN Product2Accounts PA ON PA.Account = C.Company 
UNION 
SELECT C.Company 
FROM Customers C 
INNER JOIN Product2Domains PD ON PD.Domain = C.Email_Address_Domain 
) 
+0

감사합니다. Tom –

0

: 같은 코드는 보일 것이다. 미래에 5 개의 제품이 더 있으면 5 개의 테이블을 더 가질 수 있습니까?

나는 그것의 더 나은, 당신은 제품의 유형에 대한과 외국과의 정보를 productType를 호출 할 수있는 다른 테이블을 가질 수 제품 1제품 2 테이블을 제거하고 하나 개의 제품 테이블을 만들 생각 주요 제품에 연결된 키

고객 테이블에 외래 키가있는 제품 테이블도 있습니까? 내가 볼 수있는 것에서는 조인을하려고하는 열의 이름이 외래 키가 될지 확실하지 않습니다.

+0

예, 동의합니다. 현재로서는 매우 복잡한 구조입니다. 불행히도 지금 나는 일치해야하는 것은 회사와 도메인 이름입니다. –