SELECT dbo.Monitor_Request.WorkDesc
, dbo.Monitor_Request.Request_ID
, dbo.Monitor_Request.Due_Dt
, dbo.Monitor_Request.Attempts
, dbo.Monitor_Request.Status_Ind
, dbo.Monitor_Request.Create_Dt
, dbo.Monitor_Request.Monitor_ID
, dbo.Monitor_Request.ByCustomer_ID
, dbo.Monitor_Request.ByCompanyID
, dbo.CompanyShim.Company_Name
, dbo.PostalAddressShim.HouseName
, dbo.PostalAddressShim.Street
, dbo.PostalAddressShim.Town
, dbo.PostalAddressShim.City
, dbo.PostalAddressShim.County
, dbo.PostalAddressShim.Postcode
FROM dbo.PostalAddressShim
RIGHT OUTER JOIN dbo.CompanyShim ON dbo.PostalAddressShim.Address_ID = dbo.CompanyShim.Company_Address_ID
RIGHT OUTER JOIN dbo.CUSTOMER ON dbo.PostalAddressShim.Address_ID = dbo.CUSTOMER.Address_ID
RIGHT OUTER JOIN dbo.Monitor_Request ON dbo.CUSTOMER.Customer_ID = dbo.Monitor_Request.ByCustomer_ID
AND dbo.CompanyShim.Company_ID = dbo.Monitor_Request.ByCompanyID
我创建了一个视图,用他们的地址显示客户详细信息。客户可以是个人或公司。它们存储在不同的表中。对于个人,详细信息存储在名为Customer的表中,公司详细信息存储在Company表中。我正在尝试创建数据库中所有客户的视图以显示其地址。当我单独加入表格时,我得到了地址详细信息但是如果我同时加入这两个表格(客户和公司),我没有获得地址详细信息列的空值。
如何从数据库中获取客户(个人或公司)的所有地址详细信息
答案 0 :(得分:0)
乍一看,请尝试将RIGHT OUTER JOIN
更改为LEFT OUTER JOIN
s。
答案 1 :(得分:0)
我很少发现需要使用RIGHT OUTER JOIN
,每次遇到它时,都会迫使我从右到左思考使事情复杂化。
如果我没有表现得很糟糕,那么以下联接应该等同于你所写的内容
SQL声明
dbo.Monitor_Request mr
LEFT OUTER JOIN dbo.Customer c ON c.Customer_ID = mr.ByCustomerID
LEFT OUTER JOIN dbo.CompanyShim cs ON cs.Company_ID = mr.ByCompanyID
LEFT OUTER JOIN dbo.PostalAddressShim pas ON pas.Address_ID = c.Address_ID
AND pas.Address_ID = cs.Company_Address_ID
现在这是我可以阅读和理论化的内容。从这一陈述中可以明显看出,AND
条款与客户和公司加入地址有效地相互否定并且根本没有回复任何地址。
我猜你应该只是
RIGHT JOINS
替换为LEFT JOINS
OR
代替AND
SQL声明
dbo.Monitor_Request mr
LEFT OUTER JOIN dbo.Customer c ON c.Customer_ID = mr.ByCustomerID
LEFT OUTER JOIN dbo.CompanyShim cs ON cs.Company_ID = mr.ByCompanyID
LEFT OUTER JOIN dbo.PostalAddressShim pas ON pas.Address_ID = c.Address_ID
OR pas.Address_ID = cs.Company_Address_ID