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

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

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

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

Q&A

解決済

2回答

16861閲覧

union句をサブクエリに含むクエリ

imamoto_browser

総合スコア1161

MySQL

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

0グッド

1クリップ

投稿2015/06/01 07:26

union句をサブクエリに含むクエリはどんな場合に使われますか?また、union句が使えない場合とはどんなときですか。例などを交えて説明いただけると幸いです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

私がよく使うのは以下のケースです
1.テストデータを作る場合

lang

1insert into tbl 2(col1, col2, col3) 3select * 4from( 5 select 'hoge1' col1, 'hoge2' col2, 'hoge3' col3 6 union all 7 select 'huga1' col1, 'huga2' col2, 'huga3' col3 8)

2.横のデータを縦に持ちたい場合(unpivot句の代わり)

lang

1select col1, col2, col 2from ( 3select col1, col2, col3 col from hoge 4union all 5select col1, col2, col4 col from hoge 6union all 7select col1, col2, col5 col from hoge 8)

投稿2015/06/01 09:23

kutsulog

総合スコア985

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

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

0

私はダミーを作るときによく使います。

CREATE VIEW dummy AS
SELECT 1 AS id, 'リンゴ' AS name
UNION ALL
SELECT 2 AS id, 'ミカン' AS name
UNION ALL
SELECT 3 AS id, 'イチゴ' AS name
UNION ALL
SELECT 4 AS id, 'レモン' AS name;

このダミービューを利用することで、UI側はテーブルなしにコーディングをすることが可能で、UIが完成してからテーブル設計をすることで、最終的な手戻りを最小限に抑えています。

また、MySQLでは FULL OUTER JOIN が使えません。

どうしても、FULL OUTER JOIN と同等のことをするには、UNIONを使って結合する必要があります。

https://mistymagich.wordpress.com/2011/01/06/mysql%E3%81%A7%E3%81%AE%E5%AE%8C%E5%85%A8%E5%A4%96%E9%83%A8%E7%B5%90%E5%90%88/

使えない場合??
巨大になるとパフォーマンスやメモリの問題が起きることはあり得ます。
カラム数が違うときは、少ない方にリテラルを入れましょう。

追記

回答のビューを見てください。
テーブルは入ってませんね?
ビューはエクセル(ODBC、または、エクセルマクロからコマンドラインでSQLを実行)で再作成ができるようにし、ビューをラップするストアドプロシージャを作ります。

lang

1DROP PROCEDURE IF EXISTS pr_dummy; 2DELIMITER $$ 3CREATE PROCEDURE pr_dummy( 4 -- パラメータ 5) 6BEGIN 7 -- エクセルで作ったテーブルなしのダミービューを返す。 8 SELECT * FROM dummy; 9END; 10$$ 11DELIMITER ;

最近では、仕様書(詳細設計)は作らないことが多いのかもしれませんが、一般的にどのテーブルの何から取ってくる。ということを詳細設計に書きます。そのために、テーブル設計は詳細設計より前にできている必要がある。
これが、そもそものトラブルの元です。

テーブルと疎結合になっていて、テーブル設計を無視して(命名法は合わせる必要がありますが)UI側を完成する。完全にアジャイルで完璧なUIを仕上げることができるでしょう。

そのときに使うダミーのストアドプロシージャを作るエクセルは、DBとのインタフェース仕様書(これを作らないプロジェクトがほとんど)であり、SQL側への要求仕様書になります。
それをもとにテーブル設計を行えば、トータル的な手戻りは最小限になります。

うちで使っているダミーを作るエクセルは、Oracle版とSQL Server版はサンプルを置いています。
http://www.g1sys.co.jp/stub.html

投稿2015/06/01 09:00

編集2015/06/04 00:34
kantomi

総合スコア295

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

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

imamoto_browser

2015/06/03 19:18

ご回答ありがとうございました。質問なのですが、 >このダミービューを利用することで、UI側はテーブルなしにコーディングをすることが可能で、UIが完成してからテーブル設計をすることで、最終的な手戻りを最小限に抑えています。 の部分が今ひとつ理解できないのですが、そもそも元のテーブルがないとビューは作れないし、あくまでビューは複雑なクエリを毎回打つ手間を省くものという認識なのですが、最小限のテストデータだけ元のテーブルに入れて擬似的にテストデータを使ってUI側でコーディングできるという意味合いでしょうか。
kantomi

2015/06/04 00:34

回答に追記しました。 ダミービューにテーブルはありません(テーブルなしで作れます)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問