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表中 . 我正在尝试创建数据库中所有客户的视图以显示其地址 . 当我单独加入表时,我得到了地址详细信息,但如果我同时加入两个表(客户和公司),我没有获取地址详细信息列的空值 .
如何从数据库中获取客户(个人或公司)的所有地址详细信息
2 回答
我很少发现需要使用
RIGHT OUTER JOIN
,每当我遇到它时,它就会迫使我从右到左思考使事情复杂化 .如果我没有做得很糟糕,那么以下连接应该等同于你所写的内容
SQL Statement
现在这是我阅读和理论化的内容 . 从这一陈述中可以直接看出,
AND
条款与客户和公司加入地址,实际上相互否定并且根本没有回复任何地址 .我猜你应该这么简单
用
LEFT JOINS
替换你的RIGHT JOINS
使用
OR
而不是AND
SQL Statement
乍一看,请尝试将
RIGHT OUTER JOIN
更改为LEFT OUTER JOIN
s .