2012-04-14 9 views
12

CASEステートメントで複数の値を選択しようとしています。私たちは 複数の値を持つMYSQL CASE THENステートメント

CASE 
    WHEN wall.type="bk" 
    THEN books.id1,books.id2, // and so on 
END as column_1, 

複数の列を持つTHENを行うか、我々は単にCASE THEN文の束を記述する必要がありますする方法はあり

を行うことはできません気づきましたか?それは乱雑に見えます

+0

あなたは可能性があり、私はそれをお勧めしません。複数の列を連結して後で解析する 'THEN books.id1 | '、' books.id2 ...'はあなたがしようとしていること全体にかかっています。これにより、複数の値が返され、エイリアスとして1つの問題を取り除くことができます。これは1つの値を返すためです。 – xQbert

+0

お時間をいただきありがとうございます。それをどうやって行うのか説明できますか? –

+0

booksid1 ...がそれぞれ1,2,3の場合、CONCAT(books.ID1、 '、'、books.id2、 '、' bookxId ...)は1、2、3を返します。 – xQbert

答えて

11

いいえ、単なる値です。さらに、複数の列を使用して複数の列の名前をcolumn_1とすることは矛盾しています。 :)

もう1つの列を使用して、他のIDを格納することができます(同様の場合)。elseの値を表すためにnullを使用します。

例:

CASE 
    WHEN wall.type="bk" 
    THEN books.id1 
END as column_1, 
CASE 
    WHEN wall.type="bk" 
    THEN books.id2 
END as column_2 

は、より多くの情報のためofficial documentationを確認してください。あなたが望むものを達成するための唯一の方法は、ケースを複製であるので

+0

しかし、 'THEN'節でユーザ定義の値を更新したいのですが? – modulitos

+0

@ルーカスええと、あなたが何を言っているのか分かりません。おそらくそれは別の質問であるはずです –

+0

MySQLがDRYの原則を毎週違反する方法のもう1つの例です。他の言語を学ぶ前に、MySQLを学ぶことで悪い習慣を身につけることができるという大胆な主張をするように近づいています。 –

4

CASE文は唯一、単一の値を返すことができます...

データベースサーバが最適化され、上一度だけチェックを実行する必要があります同じ条件...

0

すべてを実行することができますが、それは常にあなたが何をしたいかによって異なります。以下では、データを配列として取得し、必要な処理を行った直後の作業例を示します。

CREATE TABLE wall (`ident` int,`type` varchar(2), `order` int); 
INSERT INTO wall (`ident`, `type`, `order`) VALUES 
    (40,'bk', 1), 
    (41,'bk', 5), 
    (42,'rt', 2), 
    (43,'bk', 3), 
    (44,'rt', 1); 

CREATE TABLE books (`ident` int,`id1` int, `time` varchar(8), `id2` int); 
INSERT INTO books (`ident`, `id1`, `time`, `id2`) VALUES 
    (40, 10, '18:07:00', 20), 
    (43, 11, '05:00:00', 21), 
    (44, 12, '21:01:00', 22), 
    (41, 13, '10:00:00', 23), 
    (42, 14, '23:10:00', 24); 
#-------------------------- 
SELECT 
    CASE 
    WHEN wall.type='bk' 
    THEN CONCAT(books.id1,'-',books.id2) 
END AS column_1 

FROM wall JOIN books ON books.ident = wall.ident GROUP BY wall.ident ORDER BY wall.ident ASC; 

印刷:このリンクを介してアクションで

column_1 
1 10-20 
2 13-23 
3 NULL 
4 11-21 
5 NULL 

ソリューション: http://rextester.com/LHPI38373

関連する問題