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

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

ただいまの
回答率

90.47%

  • MySQL

    6034questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 606

star24star

score 109

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

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


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

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

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

  • 理想結果
id |type  |color |result     |
---|------|------|-----------|
  1|a     |red   |<aaa>red   |
  2|a     |red   |<aaa>red   |
  3|b     |blue  |<bbb>blue  |
  4|b     |blue  |<bbb>blue  |
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

CASE構文で実現できます。

SELECT 
  id, 
  type, 
  color, 
  CASE color 
    WHEN 'red' THEN CONCAT('<aaa>', color) 
    WHEN 'blue' THEN CONCAT('<bbb>', color) 
    ELSE color 
  END AS result 
FROM test_table;

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/22 12: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;
    ----

    キャンセル

  • 2016/04/22 12:35

    お役に立てたなら幸いです。

    > ちなみにcaseの横はcolor ではなく type で出来ました。

    colorが'red'でも'blue'でもない場合にどうするかはご質問に記載されていなかったので、
    適当に記述させていただきましたw

    ご自身で望む形にアレンジできたようで、安心しました。

    キャンセル

  • 2016/04/22 12:45

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

    キャンセル

+1

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

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

SELECT
  id,
  type,
  color,
  if(color='red','<aaa>red', if(coloer='blue','<bbb>blue','')) as result
FROM
 table
WHERE
 hoge

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

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

SELECT
  a.id,
  a.type,
  a.color,
  concat(b.result, a.color)
FROM
  table a,
  (
    SELECT 
      'a' as type,
      '<aaa>' as result
    FORM
      DUAL
    UNION
    SELECT 
      'b' as type,
      '<bbb>' as result
    FORM
      DUAL
   ) b
WHERE
  a.type = b.type

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/22 12:32

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

    キャンセル

関連した質問

同じタグがついた質問を見る

  • MySQL

    6034questions

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