我想加入5个表来提出3个不同的结果集。
我的表是:
我需要的3个结果是:
附注:每个产品的客户都可以通过帐户或域名识别。
我可以创建以下内容来提供表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个结果集...如何更好地编写此代码的任何帮助或建议将不胜感激。
答案 0 :(得分:0)
对于第三个结果,您可以继续添加UNION
以获取Product2
表的其他结果(这真的有点像数据库需要规范化)。
对于前两个结果,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
)
答案 1 :(得分:0)
我认为您的数据库结构不正确,您有2个产品的2个不同的表。这是否意味着如果将来你还有5个产品,你还会再增加5个产品?
我认为最好删除 product1 和 product2 表并创建一个产品表,然后您可以使用另一个名为productType的表,其中包含有关产品类型和外键连接到主要产品表
您的客户表中是否还有任何产品表都有外键?从我所看到的,他们试图加入的列的名称并不是很明确的外键。