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

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

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

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

Q&A

解決済

2回答

4571閲覧

テーブル名(または文字列)をカラムとして取得したい

hop

総合スコア15

MySQL

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

0グッド

1クリップ

投稿2018/11/19 02:27

初心者です。
取得結果に、それぞれ取得したテーブル名を表示させたい。
結果beforeをafterにしたいです(下記参照)。
テーブル名ではなく、適当な文字列でも構いません(区別できれば良い)。
使用しているのはMySQLです。

MySQL

1CREATE TABLE テーブルA,テーブルB 2(カラムA(varchar),カラムB(date)) 3 4SELECT * FROM テーブルA 5A | B 6a | 01 7e | 05 8 9SELECT * FROM テーブルB 10A | B 11b | 02 12c | 03 13d | 04 14 15※実行するSQL 16SELECT カラムA, MAX(カラムB)AS MAX_B 17FROM( 18 SELECT カラムA,カラムB 19 FROM テーブルA 20 UNION ALL 21 SELECT カラムA,カラムB 22 FROM テーブルB 23)AS a 24GROUP BY カラムA 25ORDER BY カラムB ASC 26 27・結果before 28A | B 29a | 01 30b | 02 31c | 03 32d | 04 33e | 05 34 35・結果after 36A | B | ? 37a | 01 | テーブルA 38b | 02 | テーブルB 39c | 03 | テーブルB 40d | 04 | テーブルB 41e | 05 | テーブルA

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

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

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

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

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

guest

回答2

0

ベストアンサー

unionしているそれぞれのテーブルに固定文字列を固定カラム名で与えれば良いと思います。

サンプルSQL

sql

1SELECT カラムA, MAX(カラムB)AS MAX_B,テーブル名 2FROM( 3 SELECT カラムA,カラムB, 'テーブルA' as テーブル名 4 FROM テーブルA 5 UNION ALL 6 SELECT カラムA,カラムB, 'テーブルB' as テーブル名 7 FROM テーブルB 8)AS a 9GROUP BY カラムA,テーブル名 10ORDER BY カラムB

投稿2018/11/19 02:37

編集2018/11/19 02:51
m.ts10806

総合スコア80850

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

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

hop

2018/11/19 02:47

回答ありがとうございます。 その方法ですと、一行目のSELECT文には何も追記しないことになるので 結果はbeforeのままになってしまいます。 一行目のSELECTに例えば 'テーブルA' AS テーブルA と追記すると 全ての結果に'テーブルA'と表示されてしまいます。
m.ts10806

2018/11/19 02:50 編集

カラム名を同じにして追記したらいいです。 イメージを回答に追記しときますね。
hop

2018/11/19 02:56

なるほどです。 無事期待通りの動作が確認できました! 助かりました。
m.ts10806

2018/11/19 02:59

解決されたようで何よりです。 UNIONで大事なのは「カラム名を揃えること」なので、おさえておいてください。
guest

0

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
GROUP_CONCATで横に並べる
UNION ALL
SELECT データ部分

投稿2018/11/19 02:49

Orlofsky

総合スコア16415

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

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

hop

2018/11/19 02:57

回答ありがとうございます。 別の方の回答で期待通りの結果が得られたので、 作業が終わったらINFORMATION_SCHEMAについても学びたいと思います。 ありがとうございました。
sazi

2018/11/19 03:02

>hop さん 質問のタイトルには合致しますが、やりたいことには合致していないですよ。
hop

2018/11/19 04:07

>sazi さん INFORMATION_SCHEMAについてのお話しでしょうか? 具体的にどうちぐはぐなのか、教えていただけると助かります。
sazi

2018/11/19 05:10 編集

INFORMATION_SCHEMAはテーブルの定義が格納されている情報です。 例えば、どんなテーブルがあって、どんなカラムがあるかなどを確認する用途(例えばテーブルの一覧など)であり、データの内容については関係がありません。 質問内容は決められたテーブルのどちらから取得したデータなのかを判別する事ですから、用途に応じた情報ではないと云う事です。
hop

2018/11/19 05:16

なるほどです。 記事をざっと見た感じ疑問符が多く浮かんだのもそのせいでしたか。 ですがこちらはこちらで使い道がありそうなので併せて勉強してみます。 ご丁寧にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問