私は3つのテーブルを持っています。テーブルCustにcustIDフィールドとその他のさまざまな値(名前、住所など)があります。右テーブルに重複がある場合にテーブルを結合する方法
テーブルリストには列IDが1つあります。各IDはCustテーブルのcustIDです Edit:これは、レコードをフィルタリングし、Thgeの結果をリストテーブルに表示されるCustIDに制限します。
3つのテーブルすべてが索引付けされます。
表トランスはTRANSACTIONIDフィールド、顧客IDを保持しているカストフィールド、そして、他の取引分野
編集を持っている:私はいくつかのケースでは何のトランザクションレコードがないことを言及している必要があります。この場合、トランザクションフィールドが空白または空白の顧客情報が1行必要です。
リストテーブルの各IDについて、custとトランザクションIDを返すクエリが必要です。トランザクションテーブルに一致する行が複数ある場合は、一致するCust情報とともに3つずつ含まれています。だから、テーブルはこのように見える場合:
Cust
ID Name
01 John
02 Mary
03 Mike
04 Jane
05 Sue
06 Frank
List
ID
01
03
05
06
Transact
TransID CustId Msg
21 01 There
22 01 is
23 02 a
24 03 tide
25 04 in
26 04 the
27 05 affairs
28 05 of
29 05 men
私がする結果セットをしたい:
CustID Name TransID Msg
01 John 21 There
01 John 22 is
03 Mike 24 tide
05 Sue 27 affairs
05 Sue 28 of
05 Sue 29 men
06 Frank -- --
(どこに - を表すNULLまたは空白)
は明らかに実際のテーブルには、はるかに大きいです(何百万行も)、それはパターンを表示します.Custテーブルの一致するフィールドを持つ、Listテーブルの項目のいずれかと一致するテーブルTransactionの各項目の1行。一致する取引がない場合は、Listテーブルの各IDから1行の顧客情報が表示されます。 CustIDはCustテーブルとListテーブルでは一意ですが、トランザクションテーブルでは一意ではありません。
これは、2005年以降の任意のバージョンのSQL Serverで動作する必要があります。
提案がありますか?
私は問題があると思われるものをかなりわからないんだけど、 joinは、join節に一致する_all_レコードを返します。さらに、あなたが言及していない目的がない限り、リストテーブルはミックスに属していないようです。顧客テーブルから取引先に直接参加することができます。あなたの質問を更新し、あなたが試した質問を追加してください。間違った結果が出た場合は、それに沿ってお手伝いしていきます。 – Eli
リストテーブルは、返されるIDを制限するために使用されています。上記のおもちゃの例では、CustID値2または4の結果が表示されないようにしています。私のテストシステムでは、数万のレコードが数個に減らされ、クリーンサイトでは、トランザクションテーブルを1-2000の結果にする –
適切なシステム(外部キー、インデックス)では、そのリストテーブルなしで正常に実行できるはずです。これを動作させるために何を試しましたか? – Eli