こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

複数のテーブルからデータを取得したい

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文を組むのが正しいのでしょうか?

投稿日時 - 2013-07-18 15:17:19

QNo.8181595

すぐに回答ほしいです

質問者が選んだベストアンサー

>【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;

投稿日時 - 2013-07-18 15:55:47

お礼

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

投稿日時 - 2013-07-18 17:23:15

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

実際に試してはいませんが、
select distinct * from (
select カラム名 from テーブル1
union
select カラム名 from テーブル2
)
というのはどうでしょう?

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

投稿日時 - 2013-07-18 15:55:31

お礼

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

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

投稿日時 - 2013-07-18 17:22:18

あなたにオススメの質問