2012-04-11 7 views
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 

私は、顧客の詳細をそのアドレスとともに表示するためのビューを作成しました。顧客は個人または会社になることができます。それらは異なるテーブルに格納されます。個人の場合、詳細は得意先テーブルに保存され、会社詳細は会社テーブルに保存されます。私は彼らのアドレスを表示するためにデータベース内のすべての顧客のビューを作成しようとしています。テーブルを別々に結合すると、アドレスの詳細が表示されますが、両方のテーブル(顧客と会社)に同時に参加すると、アドレスの詳細列にNULL値が得られません。複数のテーブルとビューに結合する

にはどうすればLEFT OUTER JOIN秒にごRIGHT OUTER JOIN Sを変更してみてください、一見

答えて

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という条項です。

私の推測では、あなたは、単に

  • 代わりAND

SQL文のあなたのRIGHT JOINS

  • LEFT JOINSで使用ORを置き換える必要である

    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

    データベースから顧客(個人または会社)の全てのアドレスの詳細を取得することができます。

    関連する問題