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

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

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

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

Q&A

解決済

2回答

4061閲覧

MYSQLのCASE分

lol

総合スコア85

MySQL

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

0グッド

0クリップ

投稿2015/11/16 07:35

select case~~~の部分にelseを書くと思いますが、
elseを取得しない方法はないですか??

10000件があって caseで金、銀、銅に振り分けて、それ以外は表示したくないですが、、、

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

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

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

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

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

guest

回答2

0

ベストアンサー

Kousuke_Shibuyaさんへのコメントから判断すると
WHEREで制限することになります。

SQL

1SELECT 2 CASE 3 WHEN [カラム名] = 1 THEN '金' 4 WHEN [カラム名] = 2 THEN '銀' 5 WHEN [カラム名] = 3 THEN '銅' 6 END 7FROM [テーブル名] 8WHERE [カラム名] IN (1, 2, 3) 9

または

SQL

1SELECT 2 * 3FROM ( 4 SELECT 5 CASE 6 WHEN [カラム名] = 1 THEN '金' 7 WHEN [カラム名] = 2 THEN '銀' 8 WHEN [カラム名] = 3 THEN '銅' 9 END award 10 FROM [テーブル名] 11) TMP 12WHERE award IS NOT NULL 13

投稿2015/11/16 08:02

編集2015/11/16 08:03
kutsulog

総合スコア985

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

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

lol

2015/11/16 08:12

回答ありがとうございますー
anonymouskawa

2015/11/16 08:26 編集

いずれのcaseにも当てはまらない値は、NULLになってしまうので、 「金、銀、銅以外の値は無視する」か「金、銀、銅と振り分ける条件カラムにNULLがあったらそのレコードは無視する」かによって判断が変わると思います。 Kousuke_Shibuyaさんの回答と、kutsulogさんの回答では少し意味合いが変わるので、注意が必要です。 具体的に言うと select case when col1 = 'A' then '金' when col1='B' then '銀' end col1 from tablename where col1 is not null ; と select * from (select case when col1 = 'A' then '金' when col1='B' then '銀' end col1 from tablename) tablename2 where col1 is not null; は取得できる値が異なります。 (意図的に銅を抜かしています。こちらのほうが結果がわかりやすいので) 参考になれば。
lol

2015/11/16 08:30

ありがとうございます。 こちらのサンプルにて参考し、うまくいくようになりました。 ありがとうございます。
lol

2015/11/16 09:59

サブクエリを使用しない方法はないでしょうか?? サブクエリはなしと言われましたT.T
anonymouskawa

2015/11/16 10:08 編集

無し、と言われた理由をお願いします。 「パフォーマンスを理由にされた」なのか、それともそもそも「サブクエリは使えない」という条件下なのか。 金、銀、銅にする値が決まっているのだから、kotsulogさんの前記案でも十分かと思います。
guest

0

13.6.5.1 CASE 構文

イメージ説明

ELSE は必須ではないので省略すればいいでだけではありませんか?

投稿2015/11/16 07:41

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

lol

2015/11/16 07:44

elseを書かなかったなNULLで検索されるのではないでしょうか?? 検索自体もしたくないですが、、、
maisumakun

2015/11/16 07:48

どれにも当てはまらないものは別途でWHEREをかけることになると思います。CASEでは絞り込み条件にはなりません。
退会済みユーザー

退会済みユーザー

2015/11/16 07:48

それなら、WHERE 句 で、WHERE colname is not NULL で除外するだけのことです。
lol

2015/11/16 08:08 編集

みなさん、回答ありがとうございます。 caseでは絞れないとのことですね。 whereの質問ですが、 case ~~ WHEN THEN END TEST とした場合、TESTがNULLなら取りたくないですが、これは、どのようにすれば良いでしょうか。
退会済みユーザー

退会済みユーザー

2015/11/16 08:10

select case -- when .. then ... end TEST from table where TEST IS NOT NULL
lol

2015/11/16 08:12

Unknown column と表示されるんです。 度々、すみません。
退会済みユーザー

退会済みユーザー

2015/11/16 08:34 編集

解決したみたいですね。
KiyoshiMotoki

2015/11/16 08:38 編集

jay様、Kosuke_Shibuya様、横から失礼します。 WHERE句では、セレクトリストで指定したエイリアス名を参照できないようです。 HAVING句ならできるんですが。。 mysql> SELECT col1 AS col FROM test; +------+ | col | +------+ | 0 | | 1 | | NULL | +------+ 3 rows in set (0.00 sec) mysql> SELECT col1 AS col FROM test WHERE col IS NOT NULL; ERROR 1054 (42S22): Unknown column 'col' in 'where clause' mysql> SELECT col1 AS col FROM test HAVING col IS NOT NULL; +------+ | col | +------+ | 0 | | 1 | +------+ 2 rows in set (0.00 sec)
退会済みユーザー

退会済みユーザー

2015/11/16 08:38

> KiyoshiMotokiさん 書いた後で、そういえばと、気づきましたw
退会済みユーザー

退会済みユーザー

2015/11/16 08:46

create 文 くらい提示してくれれば、実際に検証したものを回答するんですけどねぇ…
anonymouskawa

2015/11/16 08:50

最近自分で検証用のテーブル作りすぎて テーブル名が「a」とか「aa」「aaaa」「aaaaa」みたいにどんどん増えていますよ…。
KiyoshiMotoki

2015/11/16 08:56 編集

Kosuke_Shibuya様、おっしゃる通りですね。 このような場合、私は質問の内容によって以下のいずれかを選択します。。 1. 想像で補ったCREATE文を、こちらから提示する 2. "情報の追加・修正依頼"で依頼する 3. スルーするw
退会済みユーザー

退会済みユーザー

2015/11/16 10:04

質問文の精度によるかなあ…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問