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

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

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

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

Q&A

解決済

2回答

7068閲覧

[MySQL]条件によって文字を連結させたい

star24star

総合スコア115

MySQL

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

0グッド

0クリップ

投稿2016/04/22 03:13

[MySQL]条件によって文字を連結させたい

MySQL

1test_table 2id, 3type, -- a,b,,,, 4color -- red,blue,,,

MySQL

1id |type |color | 2---|------|------| 3 1|a |red | 4 2|a |red | 5 3|b |blue | 6 4|b |blue |

といった具合にテーブルとカラムがあったとして
typeaだったらredの前に<aaa>とつける
typebだったらblueの前に<bbb>とつける
という事をMySQLで実現するのは可能でしょうか?

WHERE句の中でconcatは使用できませんし、
調べてみても良い方法が思いつかなかったので質問させて頂きました。

ご教授のほど宜しくお願い致します。

  • 理想結果

MySQL

1id |type |color |result | 2---|------|------|-----------| 3 1|a |red |<aaa>red | 4 2|a |red |<aaa>red | 5 3|b |blue |<bbb>blue | 6 4|b |blue |<bbb>blue |

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

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

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

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

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

guest

回答2

0

Oracle でいうdecode関数があればと思いましたが、
ないので。。。

試していないのでこんな感じかなぁというイメージです。
動作保証していないのですみません。

sql

1SELECT 2 id, 3 type, 4 color, 5 if(color='red','<aaa>red', if(coloer='blue','<bbb>blue','')) as result 6FROM 7 table 8WHERE 9 hoge

みたいにすればいけるんでしょうかね?

もしくはDUAL表使いますかね?

sql

1SELECT 2 a.id, 3 a.type, 4 a.color, 5 concat(b.result, a.color) 6FROM 7 table a, 8 ( 9 SELECT 10 'a' as type, 11 '<aaa>' as result 12 FORM 13 DUAL 14 UNION 15 SELECT 16 'b' as type, 17 '<bbb>' as result 18 FORM 19 DUAL 20 ) b 21WHERE 22 a.type = b.type

投稿2016/04/22 03:30

M_Norihiro

総合スコア32

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

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

star24star

2016/04/22 03:32

ご回答有難うございます!今回はCASEを使って実現できましたが こちらも今後の参考に試してみます!
guest

0

ベストアンサー

CASE構文で実現できます。

sql

1SELECT 2 id, 3 type, 4 color, 5 CASE color 6 WHEN 'red' THEN CONCAT('<aaa>', color) 7 WHEN 'blue' THEN CONCAT('<bbb>', color) 8 ELSE color 9 END AS result 10FROM test_table;

https://dev.mysql.com/doc/refman/5.6/ja/case.html

投稿2016/04/22 03:21

KiyoshiMotoki

総合スコア4791

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

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

star24star

2016/04/22 03:30

ありがとうございます!!!CASEというものがあったのですね! ちなみにcaseの横はcolor ではなく type で出来ました。 --- SELECT id, type, color, CASE type WHEN 'red' THEN CONCAT('<aaa>', color) WHEN 'blue' THEN CONCAT('<bbb>', color) ELSE type END AS result FROM test_table; ----
KiyoshiMotoki

2016/04/22 03:35

お役に立てたなら幸いです。 > ちなみにcaseの横はcolor ではなく type で出来ました。 colorが'red'でも'blue'でもない場合にどうするかはご質問に記載されていなかったので、 適当に記述させていただきましたw ご自身で望む形にアレンジできたようで、安心しました。
star24star

2016/04/22 03:45

確かに、どちらでもない場合は考えてませんでした…が今回はどちらかになるのでこれでいこうと思いますが、他にも色々試しながら覚えようと思います! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問