首页 文章

加入几个表和视图

提问于
浏览
0
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 回答

  • 0

    我很少发现需要使用 RIGHT OUTER JOIN ,每当我遇到它时,它就会迫使我从右到左思考使事情复杂化 .

    如果我没有做得很糟糕,那么以下连接应该等同于你所写的内容

    SQL Statement

    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 Statement

    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
    
  • 0

    乍一看,请尝试将 RIGHT OUTER JOIN 更改为 LEFT OUTER JOIN s .

相关问题