2016-09-15 16 views
1

私は参加しようとしている2つのテーブルを持っています。2つの列に2つのMySQLテーブルを結合する方法?

表1:T1

|id|date|hits| 
--- ----- ------ 
A1 01 2 
A1 02 2 
A2 02 3 

表2:T2

|id|date|runs| 
--- ----- ------ 
A1 01 1 
A2 02 0 
A3 02 2 

出力:

|id|date|hits|runs| 
--- ----- --- --- 
A1 01 2 1 
A1 02 2 0 
A2 02 3 0 

各IDは、複数の日付を持っており、日付ごとに異なるヒット/ランがあります。

私が試してみました:

SELECT t1.*,t2.* 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON (t1.id=t2.id) AND (t1.date=t2.date); 

これは私に巨大なテーブルを提供します。 T1よりも行数が多い。

T2よりもT1よりも多くの行がありますが、T1の日付、つまりLEFT JOINだけが気になります。

答えて

0

データのサンプルや出力が期待されるものを見なければ、何をしようとしているのか分かりませんが、LEFT JOINのことを正しく理解していないと推測します。

T1 LEFT JOIN T2は、T1の行ごとに1つの行に制限します。

T1内の特定の行と一致するT2内に複数の行がある場合、結合の結果にはT2のすべての一致する行が含まれます。

一致するT2の行がではなく、の行が存在していても、T1 LEFT JOIN T2は、特定の行から出力されます。

私はおそらくあなたのようなものが欲しいと思っています:T2から一致する最新のに参加して、T1から各行を出力します。そのような場合は、Stack Overflowに既に掲載されている多くのソリューションがあります。質問を探してください。あなたのコメントを再


おかげで、私はあなたが供給されるテストデータを使用してクエリをテストしました。それはあなたが示す結果を与えるものではありません。結果は次のとおりです。

SELECT t1.*,t2.* 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON (t1.id=t2.id) AND (t1.date=t2.date) 
ORDER BY t1.id, t1.date; 
+------+------+------+------+------+------+ 
| id | date | hits | id | date | runs | 
+------+------+------+------+------+------+ 
| A1 | 01 | 2 | A1 | 01 | 1 | 
| A1 | 02 | 2 | NULL | NULL | NULL | 
| A2 | 02 | 3 | A2 | 02 | 0 | 
+------+------+------+------+------+------+ 

デモ:http://sqlfiddle.com/#!9/cece2/2

私はあなたが上記の投稿したものとは異なるクエリを実行していると思います。参加条件にANDORが混在していますか?

+0

こんにちは、t1.id = t2.idを満たす複数の値の行がありますが、t1.id = t2.id ** AND ** t1.date = t2.dateの一致は1つだけです。私は説明のためにコメントに値を追加しました – user3007270

+0

ありがとう。私が持っていた問題は、 '(t1.id = t2.id)AND(t1.date = t2.date)'という制限を満たす行が1行しかないと思っていたのですが、そうではないことがわかったデータを見直すと、それは有り難いです。 – user3007270

関連する問題