-3

2 つの SQL テーブルがあります。

Table1
    ID | field1
    1  | a
    2  | b

Table2
        field1 | field2
        a      | 111
        a      | 222
        b      | 333
        b      | 444
        b      | 555

私は以下を取得する必要がありますTable3:

ID | field1 | field2
1  | a      | 111
1  | a      | 222
2  | b      | 333
2  | b      | 444
2  | b      | 555

このような SQL クエリを実行するのにうんざりしています。

SELECT t1.ID, t1.field1, t2.field2 FROM table1 t1, table2 t2 WHERE t1.field1=t2.field1;

しかし、その結果、重複したエントリを受け取りました。

ID | field1 | field2
1  | a      | 111
1  | a      | 111
2  | a      | 222
2  | a      | 222

助けてください。

4

5 に答える 5

3

(サンプルデータは重複しないため、問題を代表するものではないと思います。)

DISTINCT次のように、キーワードを使用して重複を排除できます。

select distinct t1.ID,
    t1.field1,
    t2.field2
from table1 t1
inner join table2 t2 on t1.field1 = t2.field1;

ここで問題を説明するサンプル SQL Fiddle: http://sqlfiddle.com/#!2/ed198/1

ここに示されているソリューション: http://sqlfiddle.com/#!2/ed198/2

于 2012-05-22T21:23:03.397 に答える
3

あなたのアプローチ (あなたの SQL は醜くて読みにくいですが) はうまくいくはずです。

オンラインで動作することを確認してください: sqlfiddle

問題は、入力テーブルの 1 つに重複があることです。SELECT * FROM Table1orを試すSELECT * FROM Table2と、おそらく次のように表示されます。

ID | field1
1  | a
2  | b
1  | a
2  | b

私は提案します:

  • テーブルから重複行を削除します。
  • フィールドに一意のインデックスを追加して、ID再発を防ぎます。
于 2012-05-22T21:24:41.773 に答える
0

GROUP BY結果から重複を削除するために使用します。

SELECT t1.ID, t1.field1, t2.field2
FROM table1 t1, table2 t2
WHERE t1.field1=t2.field1
GROUP BY t1.ID, t1.field1, t2.field2;
于 2012-05-22T21:23:33.163 に答える
0

を使用DISTINCTして結果を取得してみてください。また、テーブル名の間にコンマではなく、テーブルに JOIN 構文を使用することをお勧めします。

SELECT DISTINCT t1.ID, t1.field1, t2.field2 
FROM table1 t1
INNER JOIN table2 t2 
    ON t1.field1=t2.field1;
于 2012-05-22T21:23:58.483 に答える
0

そのクエリの前に SELECT DISTINCT をスローする必要があります。SELECT DISTINCT t1.ID、t1.field1、t2.field2 FROM table1 t1、table2 t2 WHERE t1.field1=t2.field1;

于 2012-05-22T21:25:15.517 に答える