2017-11-26 12 views
0

3つの異なる結果セットを得るために5つのテーブルを結合したいと思います。SQL結合5テーブル - 包含&除外

私のテーブルは以下のとおりです。

  1. お客様 - メールアドレス(一意のID)、電子メールアドレスのドメイン名が含まれている、アカウント名、人口統計情報など(お客様)
  2. 製品1人の顧客のアカウント名(Product1Accounts)
  3. 製品1顧客の電子メールアドレスのドメイン名(Product1Domains)
  4. 製品2顧客アカウント名(Product2Accounts)
  5. 製品2顧客の電子メールアドレスのドメイン名(製品版uct2Domains)

私は必要な3の結果は次のとおりです。製品を除く

  1. 製品1人の顧客が製品を除く2人の顧客
  2. 製品2人の顧客1人の顧客
  3. 両方の製品1及び2
  4. のお客様

サイドノート:各製品の顧客は、アカウント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 

除外を組み込む方法にハングアップ取得しています私もよを作成することができますどのように私が探している3番目の結果セットを取得するかわからない...任意のヘルプやアドバイスをこのコードを書く方が良いと評価されます。

+1

[tag:rdbms]は何を使用していますか? – Mureinik

+0

SQL Server Express 2017/SQL Server Management Studio –

答えて

0

第3の結果として、Product2テーブルの追加結果を得るために、UNIONを追加し続けることができます(実際にはデータベースを正規化する必要があるような臭いがあります)。

最初の2つの結果については、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

私はあなたのデータベース構造が正しくないと思う、あなたは2つの製品のための2つのテーブルがあります。将来的に5つの製品がある場合は、さらに5つのテーブルがありますか?

は、私は、その優れたが、その後、あなたは、製品の種類に関する外国との情報を持っているでProductTypeを呼び出すことができる別のテーブルを持つことができます製品1product2テーブルを削除し、1つの製品テーブルを作成することだと思いますメインの製品に接続されているキー表

また、お客様の製品テーブルには、外部テーブルがお客様のテーブルで利用可能ですか?私が見ることができるものから、あなたが結合をしようとしている列の名前は、外来キーであることは本当に明確ではありません。

+0

はい、私は同意します - 現時点では非常に面倒な構造です。残念ながら私が今一致させなければならないのは、会社名とドメイン名だけです。 –

関連する問題