加入多个表格和视图

  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表中。 我试图创建一个数据库中所有客户的视图来显示他们的地址。 当我单独加入表格时,我会收到地址详细信息,但如果我同时加入两个表格(客户和公司),则不会为地址详细信息列获取空值。

如何从数据库中获取客户(个人或公司)的所有地址详细信息


我很少发现需要使用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条款在加入与客户和公司有效的地址方面有效否定对方,并且根本没有返回任何地址。

我的猜测是你应该简单

  • LEFT JOINS替换你的RIGHT 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
    

    乍一看,尝试将您的RIGHT OUTER JOIN更改为LEFT OUTER JOIN

    链接地址: http://www.djcxy.com/p/86287.html

    上一篇: Joining several tables and views

    下一篇: Cannot update data through GridView