プロが教える店舗&オフィスのセキュリティ対策術

教えてください。
複数のカラムにて取りうる値全てを重複なしで取得したいのですがうまくいきません。

例えば下記のようなテーブルがあるとします。
┌────┬────┬────┐
│第一希望│第二希望│第三希望│
├────┼────┼────┤
│ 東京 │ 大阪 │ 宮城 │
├────┼────┼────┤
│ 大阪 │ 京都 │ 東京 │
├────┼────┼────┤
│ 福岡 │ 愛知 │ 東京 │
└────┴────┴────┘

以下のような結果を得たいです。
┌──┐
│東京│
├──┤
│大阪│
├──┤
│宮城│
├──┤
│京都│
├──┤
│福岡│
├──┤
│愛知│
└──┘

どなたかご教授ください。
お願いします。

A 回答 (1件)

提示された表を使っての例を、回答1に示します。


この方法では、列を縦につなげるような指定になり、操作したり情報を増やしたりする上で制約が出てきてしまうと思います。
回答2のように、列を増やさず別の行で管理すれば、検索は単純になり、管理する情報を増やすのも楽だと思います。

(1)回答1
【表定義】
set names sjis;
create table t1
(第一希望 varchar(4),
第二希望 varchar(4),
第三希望 varchar(4));

【格納データ】
insert into t1 values
('東京','大阪','宮城'),
('大阪','京都','東京'),
('福岡','愛知','東京');

【検索】
select 第一希望 as 志望校 from t1
union
select 第二希望 as 志望校 from t1
union
select 第三希望 as 志望校 from t1
;

(2)回答2
【表定義】
create table t1
(氏名 varchar(20),
志望順 tinyint,
志望校 varchar(4));

【格納データ】
insert into t1 values
('yamada',1,'東京'),
('yamada',2,'大阪'),
('yamada',3,'宮城'),
('iwaki',1,'大阪'),
('iwaki',2,'京都'),
('iwaki',3,'東京'),
('satonaka',1,'福岡'),
('satonaka',2,'愛知'),
('satonaka',3,'東京');

【検索】
select distinct(志望校) from t1;
    • good
    • 0
この回答へのお礼

早速の回答、ありがとうございます。
おっしゃるとおり、回答2の様に別tableで管理した方が簡単な面もありますが、他の部分との兼ね合いでいろいろ面倒なことがあるもので…

unionって自動的に(?)重複を丸めてくれるんですね。コレがまさに求めていた解でした。
どうもありがとうございます。

お礼日時:2006/11/24 05:52

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

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