2017-06-07 7 views
0

2つのテーブルがあり、table1には22780行が含まれています。今私はテーブル2(これは重複を含んでいない)とtable1を結合したままにして、私は23588の行を得る。MySQLで左結合後の行数が多い

SELECT * FROM Table1 
left join Tabelle6 ON CAST(Table1.Customer AS Int) = table2.Customer 

なぜ今はもっと多くの行が得られますか?私はtable1からすべての行が一度必要です。

編集:問題が見つかりました。表2には重複が含まれています。しかし、すべての行を一度だけ結合し、それ以上の一致を無視する方法はありますか?

+1

必要なフィールドだけを選択するために 'SELECT * 'を絞り込んだら' DISTINCT'すれば十分ですか? –

+0

そのヒントありがとう!これを正しく理解すると、table2に完全な重複行が含まれている場合にのみ動作します。 – Leo

+0

この情報量で私は方法を示すことしかできず、あなたは他のすべてをしなければならないでしょう。 Timの2番目の例を取っ​​て、 'SELECT MIN(id)AS id、NeededField FROM Table2 GROUP BY NeededField 'と置き換えてください。 –

答えて

2

コメントが示すように、これを処理する最も簡単な方法は、おそらくあなたの結果セットから重複を削除するSELECT DISTINCTを行うには、次のようになります。

SELECT DISTINCT 
    t1.col1, 
    t1.col2, 
    t1.Customer, 
    ... 
FROM Table1 t1 
LEFT JOIN Table2 t2 
    ON CAST(t1.Customer AS Int) = t2.Customer 

しかし、別のオプションはここにあります。重複する顧客を削除するサブクエリにも参加できます。これにより、第1のテーブルのレコードが、第2のテーブルの複数のレコードに一致することから重複しなくなる。

SELECT * 
FROM Table1 t1 
LEFT JOIN 
(
    SELECT DISTINCT Customer 
    FROM Table2 
) t2 
    ON CAST(t1.Customer AS Int) = t2.Customer 
+0

それは優秀に見えます。ありがとうございました!。しかし、table2に、結合属性に重複がありますがそれ以外の場合は異なる行が含まれている場合は、まだ複数の行が取得されます。すべてのjoin-attibuteに対してtable2の最初の結果のみを選択する方法はありますか? – Leo

+1

「最初の結果」は明確に定義されていません。この文脈で、どのように「最初」を定義していますか? 2番目のテーブルのカラムを集約して 'GROUP BY'を使うこともできますが、答えを出すためには具体的なデータが必要です。 –

+1

「明確に定義されたもの」このような背景情報では、「42」が有効な回答になります。最初の平均値に基づいて最小値(id)または最大値(id)を選択します。 –

関連する問題