2009-07-27 9 views
1

何が欠けていますか? Last_Nameクエリに一致するすべてのレコードを返す必要があります.Field_Tableに顧客番号が含まれているかどうかは問いません。SQLの4つのテーブル1つのレコードセット

各クライアントIDには、連絡先番号が0の親があるため、Clientテーブルを2回呼び出しています。親レコードで市、州、郵便番号、会社名を返す必要があります。

私はrecordset.movenextでループしてみましたが、クエリが非常に遅くなり、ループが望ましくないものになります。

顧客番号が使用可能になったときにクライアント番号を含むようにクライアントテーブルを照会し、不在時に返却するにはどうすればよいですか?

現在の結果はLast_Nameクエリと一致し、customer_numberを持つレコードです。 last_nameクエリと一致するレコードは得られませんが、顧客番号はありません。

注:会社に番号がない場合、会社はField_Tableにレコードを持っていません。

SELECT A.Contact, 
     A.Id, 
     A.First_Name, 
     A.Last_Name, 
     B.Company_Name, 
     B.City, 
     B.State, 
     FT.Number 
FROM Client C 
    INNER JOIN Client B ON A.Id = B.Id 
    LEFT OUTER JOIN Field_Table FT ON B.Id = FT.Id 
    LEFT OUTER JOIN Field_Definitions FD ON FT.Type_Id = FD.Type_Id 
WHERE (A.Last_Name LIKE '%Last Name%') 
    AND (B.Contact = 0) 
    AND (FD.Description = 'Customer Number') 

答えて

1

FD.Descriptionパーツは、WHERE句ではなくON結合条件に配置する必要があります。

SELECT A.Contact, A.Id, A.First_Name, A.Last_Name, B.Company_Name, B.City, B.State, FT.Number 
FROM Client C 
INNER JOIN Client B ON A.Id = B.Id 
LEFT OUTER JOIN Field_Table FT ON B.Id = FT.Id 
LEFT OUTER JOIN Field_Definitions FD ON (FT.Type_Id = FD.Type_Id) AND (FD.Description = 'Customer Number') 
WHERE (A.Last_Name LIKE '%Last Name%') AND (B.Contact = 0) 
+0

ご返信ありがとうございました。途中であなたの提案を取り入れながら、私にはかなりの洞察を提供してくれましたが、Quassnoiは私に私が探していた答えをくれました。ご支援いただき、ありがとうございます。 – Jason

0
SELECT A.Contact, 
     A.Id, 
     A.First_Name, 
     A.Last_Name, 
     B.Company_Name, 
     B.City, 
     B.State, 
     FT.Number 
FROM Client C 
INNER JOIN 
     Client B 
ON  B.Id = A.id 
     AND B.contact = 0 
INNER JOIN 
     Field_Definitions FD 
ON  FD.Description = 'Customer Number' 
LEFT OUTER JOIN 
     Field_Table FT 
ON  FT.Type_Id = FD.Type_Id 
     AND FT.id = B.Id 
WHERE A.Last_Name LIKE '%Last Name%' 
+0

私はちょうど今泣いた。 Quassnoi、あなたのソリューションは完璧に動作しました。 ありがとうございました! – Jason

0

は今、あなたは左の右側にテーブルへの参照を置くことができない理由をwhere句に参加理解していますか?これは、where句に入れると、where条件がすべてのレコードで満たされている必要があるため、結合を内部結合に変換するためです。いつでも左結合を使用すると、結合を実行して保持する唯一の参照は、nullレコードを探しているテーブルで、テーブル参照ではない結合の残りのレコードを返します。

関連する問題