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テーブルに保存されます。データベース内のすべての顧客のビューを作成して、住所を表示しようとしています。テーブルを個別に結合すると、住所の詳細が取得されますが、両方のテーブル(顧客と会社)を同時に結合すると、住所の詳細列のnull値が取得されません。

データベースから顧客(個人または会社)のすべての住所の詳細を取得するにはどうすればよいですか?

4

2 に答える 2

0

一見、RIGHT OUTER JOINsをLEFT OUTER JOINsに変更してみてください。

于 2012-04-11T10:08:35.910 に答える
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
于 2012-04-11T10:11:17.477 に答える