-1

2つの異なるフィールドで2つのテーブルを結合する必要があります。私はこのような表1を持っています:

key  productid  customer
1    100        jhon
2    109        paul
3    100        john

また、表2には同じフィールドがありますが、最初の表に関連する必要がある追加のデータ

key  productid  customer  status  date ...
1    109        phil      ok      04/01 
2    109        paul      nok     04/03
3    100        jhon      nok     04/06 
4    100        jhon      ok      04/06

両方の「キー」フィールドは自動インクリメントです。問題は、リレーションシップフィールドが結果全体で数回繰り返され、テーブル2の1つの行がテーブル1の行と1回だけ関連付けられるように、1対1のリレーションシップを生成する必要があることです。

左結合(customer=customerおよびproductid=productid)を実行しましたが、関係が重複して出てきました。タブレット2の行は、テーブル1の行に何度も関連付けられていました。

明確にするために...
両方のテーブルをクロスチェックする必要があります。テーブル1はXLSレポートから読み込まれ、テーブル2はデータベースからのデータであり、多くのステータスデータを含む顧客のトランザクションを反映しています。XLSの行がデータベースに存在するかどうかを確認してから、追加のステータスデータをロードする必要があります。XLSの行にデータベースに対応するデータがない場合は、レポートを作成する必要があります。

このJOINをどのように達成できますか?これはSQLだけで可能ですか?

4

2 に答える 2

1

以下の sql を使用して、MS SQL でこれを実現できます。SQLite がこれをサポートしているかどうかは不明です。

select a.*, c.*
from table2 a, ( select min(key) key, productid, customer
                 from table1
                 group by productid, customer 
                   ) b,
               table1 c
where a.productid = b.productid
and   a.customer = b.customer
and   b.key = c.key
于 2012-04-21T17:47:22.890 に答える
0

これを理解する 1 つの方法は、各テーブルが正確に何を表しているかを把握することです。どちらのテーブルも同じものを表しているように見えますが、行は購入と呼ばれるものを表しています。では、なぜ 2 つの別々のテーブルがあるのでしょうか。おそらく、2 番目の表では、各購入についてさらに詳しく説明していますか? jhon が製品 100 を購入したように、最初は「nok」で、次に「ok」でしたか? そうであれば、2 番目のテーブルのキー (テーブルを一意にするもの) は 3 つのフィールドすべてになります。一致する 2 つのフィールドのみで結合しますが、同じ一意のキーを持つ 2 つの行がある場合、一意性は期待できません。テーブルに追加のインデックスを作成して、真に一意なものを確認すると役立つ場合があります。

于 2012-04-21T16:55:51.017 に答える