2017-07-07 5 views
0

私は3つの異なるSQLテーブルを使用しています。ここでは、テーブルがどのように見えるかです:テーブルAから行を選択すると、テーブルBまたはテーブルCの類似の列に文字列が存在します

Master Accounts 
--------------- 
CustomerNumber PK 
CompanyName 
More Columns... 

Bill Tos 
--------------- 
MasterCustomerNumber FK 
CompanyName 

Ship Tos 
--------------- 
MasterCustomerNumber FK 
CompanyName 

私は会社名は、3つのテーブルのいずれかで文字列「AMA」を含むマスターアカウントテーブル内のすべての列を返すMS SQLクエリを書きたいです。ここで

は私の現在のSQLです:

SELECT DISTINCT 
    MA.* 
FROM MasterAccounts MA 
LEFT JOIN BillTos BT 
    ON MA.CustNo = BT.MasterCustNo 
LEFT JOIN ShipTos ST 
    ON MA.CustNo = ST.MasterCustNo 
WHERE MA.CompanyName LIKE '%ama%' OR BT.CompanyName LIKE '%ama%' OR ST.CompanyName LIKE '%ama%' 

私の目標は、billtoまたはshipTo要素の仕入は「AMA」を含んでいるすべてのマスターアカウントを取得することです。

+4

あなたが直面している難しさは何ですか? –

+0

現在のクエリでデータベースを照会していますが、期待した結果が返されていません。ジョインに間違ったことがあるような気がします。それは正しいか? – Aaron

+4

クエリがよく見えます。いくつかのサンプルデータと期待している結果を共有できますか? –

答えて

0

私はあなたにコメントを読み、多分これが速く行く:

select MA.* from 
MasterAccounts MA 
join 
(select CustNo nmb from MasterAccounts where CompanyName LIKE '%ama%' 
union 
select MasterCustNo nmb from BillTos where CompanyName LIKE '%ama%' 
union 
select MasterCustNo nmb from ShipTos where CompanyName LIKE '%ama%') num on (num.nmb = MA.CustNo) 

あなたがより多くの企業が必要な場合は、多分あなたは小文字で会社名を使用して...

* i「は、クエリ内の小さな誤差であれば申し訳ありません - 私はこの速いを読んで....