プロが教えるわが家の防犯対策術!

1つのテーブルから重複したデータを取り除いて表示するときに使う
【select distinct カラム名 from テーブル名;】
がありますよね。

それと同じようなことを複数のテーブルをまたいで行いたいのですがうまくいきません。
ちなみに両方のテーブルのカラム名は同じです。

【select distinct カラム名 from テーブル1 union select distinct カラム名 from テーブル2;】
としても重複を取り除いた後にテーブルを結合してるので結果的に両テーブルの重複した値を取り除くことができず。

そこで
【select distinct T1.カラム名, T2.カラム名 from テーブル1 T1. テーブル2 T2;】
としてみたのですが、クエリを実行中のまま反応がないので悩んでます。

ちなみに2つのテーブルのデータはそれぞれ2万件ほどです。
こういう時どういうsql文を組むのが正しいのでしょうか?

A 回答 (2件)

>【select distinct カラム名 from テーブル1 union select distinct カラム名 from テーブル2;】


>としても重複を取り除いた後にテーブルを結合してるので結果的に両テーブルの重複した値を取り除くことができず。

いや、できますね
むしろunionするならdistinctもいらないです。

//データ作成
create table t1(data int);
create table t2(data int);
insert into t1 values(1),(2),(2),(3),(3),(4);
insert into t2 values(1),(3),(3),(5);

//表示
select data from t1 union select data from t2;

//重複も表示するならunion all
select data from t1 union all select data from t2;
    • good
    • 1
この回答へのお礼

何か勘違いしていたようで、教えていただいた通りunionでやってみるとうまくいきました。
ありがとうございます!

お礼日時:2013/07/18 17:23

実際に試してはいませんが、


select distinct * from (
select カラム名 from テーブル1
union
select カラム名 from テーブル2
)
というのはどうでしょう?

ちなみに、
 select distinct T1.カラム名, T2.カラム名 from テーブル1 T1, テーブル2 T2
これをやらかすと、テーブル結合により2万件×2万件=4億件の中からの検索になりますので、
クエリ実行中のまま反応がなくなって当たり前です。
    • good
    • 0
この回答へのお礼

この文では思うように動きませんでした。

>テーブル結合により2万件×2万件=4億件の中からの検索になりますので、
4億件(^_^;)
なるほどこんな事が起こっていたのですね
非常に勉強になりました。

お礼日時:2013/07/18 17:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す