質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

2回答

21612閲覧

【MySQL】別カラムを一つのカラムで管理したい

star24star

総合スコア115

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2016/03/07 04:34

編集2022/01/12 10:55
+-----+-----+ |A_cd |B_cd | +-----+-----+ | 1| 1 | | 2| 1 | | 3| 2 | | 4| 1 | | 5| 2 | +-----+-----+

もしA_cdが
1なら"あ"
2なら"い"
3なら"う" ...

もしB_cdが
1なら"か"
2なら"き"

と言った管理を一つのカラム内で行いたいのですが可能でしょうか?

このような感じに…、

+-----+ |A_cd | +-----+ | あ| | い| | う| | え| | お| | か| | き| | い| | あ| | え| | お| | ... | +-----+

SQL

1SELECT 2 CASE A_cd -- A_cdの中では1~5までの数値を管理 3 WHEN 1 THEN 'あ' 4 WHEN 2 THEN 'い' 5 WHEN 3 THEN 'う' 6 WHEN 2 THEN 'え' 7 WHEN 3 THEN 'お' 8 END A_cd 9 FROM 10 table_name 11 12 UNION 13 14 SELECT 15 CASE B_cd -- A_cdの中では1~2までの数値を管理 16 WHEN 1 THEN 'か' 17 WHEN 2 THEN 'き' 18 END A_cd 19 FROM 20 table_name 21 22 GROUP BY 23 id

A_cdB_cdtable_nameというテーブル内で管理している。
2つのカラムを一つにまとめたい

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

UNION ALLすれば一カラムに纏められます。

SQL

1SELECT A_cd, [CASE WHENでの翻訳] FROM [table] WHERE A_cd IS NOT NULL 2UNION ALL 3SELECT B_cd, [CASE WHENでの翻訳] FROM [table] WHERE B_cd IS NOT NULL

※重複を省きたい場合はUNION ALLではなく、UNIONにしてください。

投稿2016/03/07 04:46

編集2016/03/07 05:15
lilithchan

総合スコア249

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

star24star

2016/03/07 06:53

SELECT CASE A_cd WHEN 1 THEN 'あ' WHEN 2 THEN 'い' WHEN 3 THEN 'う' END A_cd FROM table_name UNION SELECT CASE B_cd WHEN 1 THEN 'え' WHEN 2 THEN 'お' END A_cd FROM table_name GROUP BY id のような感じにすると、縦で同じカラムに収まるのですが、 +-----+ |A_cd | +-----+ | あ| | い| | う| | null| | null| | null| | え| | え| | お| +-----+ といったように、"あ"、"い"、"う"にnullが入りつつ重複してしまうのです
lilithchan

2016/03/07 07:05 編集

すみません。ちょっと訂正です。 SELECT DISTINCT A_cd, [CASE WHENでの翻訳] FROM [table] WHERE A_cd IS NOT NULL UNION SELECT DISTINCT B_cd, [CASE WHENでの翻訳] FROM [table] WHERE B_cd IS NOT NULL あと、WHERE句が抜けているみたいなので、WHERE句もつけて下さい。
star24star

2016/03/07 07:20

やはりnullが入ってしまいます。 あ、うつし忘れてしまっていますが、ご指摘いただいたWHERE句も書いています
guest

0

質問を読み直したところ、質問の意図が違うことが分りました。
「A_cd、B_cdに別のマスタを結合(JOIN)し、それぞれ重複を排除(DISTINCT)して、
A_cd分とB_cd分を縦に並べる(UNION)する」でしたね。

SQL

1SELECT DISTINCT -- Aパート 抽出結果を重複除外 2 [Master_A].[A_Value] AS Val -- B側と同じ項目数、項目名にする 3FROM [T_sample] 4LEFT JOIN [Master_A] -- A_cdに対するマスタを結合 5 ON [T_sample].[A_cd] = [Master_A].[A_cd] 6 7UNION ALL 8SELECT DISTINCT -- Bパート 抽出結果を重複除外 9 [Master_B].[B_Value] AS Val -- A側と同じ項目数、項目名にする 10FROM [T_sample] 11LEFT JOIN [Master_B] -- B_cdに対するマスタを結合 12 ON [T_sample].[B_cd] = [Master_B].[B_cd]

上記が、訂正版のSQL文です。
以上、ご参考になりますでしょうか?


以下、訂正前回答

「A_cdのマスタ、B_cdのマスタという2つのテーブルを結合する方法は?」
という質問でしょうか?

T_sample +-----+-----+ |A_cd |B_cd | +-----+-----+ | 1| 1 | | 2| 1 | | 3| 2 | +-----+-----+
Master_A +----+--- |A_cd|A_Value +----+--- |1 |あ |2 |い |3 |う
Master_B +----+--- |B_cd|B_Value +----+--- |1 |え |2 |お

の場合、下記のSQL文で、結合した状態を抽出できます。

SQL

1SELECT 2 [Master_A].[A_Value] 3 , [Master_B].[B_Value] 4FROM [T_sample] 5LEFT JOIN [Master_A] 6 ON [T_sample].[A_cd] = [Master_A].[A_cd] 7 8LEFT JOIN [Master_B] 9 ON [T_sample].[B_cd] = [Master_B].[B_cd] 10;

その抽出結果は下記のようになります。

+--------+--- |A_Value |B_Value +--------+--- | あ | え | い | え | う | お

以上、
ご参考になりますでしょうか?

投稿2016/03/07 05:02

編集2016/03/07 05:13
Aeona

総合スコア396

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

star24star

2016/03/07 07:34 編集

イメージとしてはそのような感じです。 分かりづらい説明で申し訳ございません。。。、 テーブルは一つで、その中で管理している2つのテーブルを一つのカラムに収めたいのです UNIONで一つのカラムにはおさまったのですが、A_cd、B_cdの2つが縦に並んだだけで重複してしまうのです。(重複部分にはnullが入る)
Aeona

2016/03/07 09:52

SELECT で表示する項目はコード以外にも複数あるということでしょうか?もしそうであれば質問文を修正していただければそれに合わせて回答文も編集します。ご検討ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問