我需要完成此查询,我需要返回在特定日期带来物品的客户的名称以及每件商品的名称。
但是,每当我将客户表连接到其他表时,它基本上都会返回为 NULL。里面肯定有数据。
我已经尝试了一系列不同的连接类型,但似乎没有一种链接并保留客户信息。 我的连接类型似乎有问题...或。
提前感谢团队!
SELECT DISTINCT PM.Name AS [ProductModel Name], P.FirstName AS [Customer Name]
FROM AdventureWorksDB.Production.TransactionHistory TH
FULL JOIN AdventureWorksDB.Production.Product PP
ON TH.ProductID = PP.ProductID
FULL JOIN AdventureWorksDB.Production.ProductModel PM
ON PP.ProductModelID = PM.ProductModelID
FULL JOIN AdventureWorksDB.Purchasing.ProductVendor PV
ON PP.ProductID = PV.ProductID
FULL JOIN AdventureWorksDB.Purchasing.Vendor V
ON PV.BusinessEntityID = V.BusinessEntityID
FULL JOIN AdventureWorksDB.Person.BusinessEntity BE
ON V.BusinessEntityID = BE.BusinessEntityID
FULL OUTER JOIN AdventureWorksDB.Person.Person P
ON BE.BusinessEntityID = P.BusinessEntityID
WHERE PP.SellStartDate = '2007-07-01'
和输出:
ModelName |Customer Name
--------------------------------------
All-Purpose Bike Stand | NULL
Bike Wash | NULL
Chain | NULL
Classic Vest | NULL
Fender Set - Mountain | NULL
Front Brakes | NULL
Front Derailleur | NULL
Hitch Rack - 4-Bike | NULL
HL Bottom Bracket | NULL
...
etc.
将WHERE
子句中的限制移动到相应连接的ON
子句:
SELECT DISTINCT PM.Name AS [ProductModel Name], P.FirstName AS [Customer Name]
FROM AdventureWorksDB.Production.TransactionHistory TH
FULL JOIN AdventureWorksDB.Production.Product PP
ON TH.ProductID = PP.ProductID AND
PP.SellStartDate = '2007-07-01'
-- rest of your current query
您当前的WHERE
子句将筛选出Product
表中所有销售开始日期为 2007 年 7 月 1 日的记录。
FULL JOIN
几乎从未被使用过 - 并且几乎从不需要遍历定义良好的适当数据模型。 在这种情况下,这是完全不合适的,因为您需要填写所有列来回答问题。
您正在获得NULL
值,因为所有这些值FULL JOIN
s。 不匹配的行生成NULL
值。
我需要返回在特定日期带来物品的客户姓名和每件物品的名称。
因此,请使用INNER JOIN
. 仅当一位客户在该日期多次购买同一产品时,才需要SELECT DISTINCT
。 我会从一个简单的SELECT
开始:
SELECT PM.Name AS [ProductModel Name], P.FirstName AS [Customer Name]
FROM AdventureWorksDB.Production.TransactionHistory TH JOIN
AdventureWorksDB.Production.Product PP
ON TH.ProductID = PP.ProductID JOIN
AdventureWorksDB.Production.ProductModel PM
ON PP.ProductModelID = PM.ProductModelID JOIN
AdventureWorksDB.Purchasing.ProductVendor PV
ON PP.ProductID = PV.ProductID JOIN
AdventureWorksDB.Purchasing.Vendor V
ON PV.BusinessEntityID = V.BusinessEntityID JOIN
AdventureWorksDB.Person.BusinessEntity BE
ON V.BusinessEntityID = BE.BusinessEntityID
AdventureWorksDB.Person.Person P
ON BE.BusinessEntityID = P.BusinessEntityID
WHERE PP.SellStartDate = '2007-07-01'
注意:这是使用您在查询中提供的逻辑。 不过,基于这个问题,我希望WHERE
条款是:
WHERE CONVERT(DATE, TH.TransactionDate) = '2007-07-01'