CASE
ステートメントで複数の値を選択しようとしています。私たちは 複数の値を持つMYSQL CASE THENステートメント
CASE
WHEN wall.type="bk"
THEN books.id1,books.id2, // and so on
END as column_1,
複数の列を持つTHEN
を行うか、我々は単にCASE THEN
文の束を記述する必要がありますする方法はあり
CASE
ステートメントで複数の値を選択しようとしています。私たちは 複数の値を持つMYSQL CASE THENステートメント
CASE
WHEN wall.type="bk"
THEN books.id1,books.id2, // and so on
END as column_1,
複数の列を持つTHEN
を行うか、我々は単にCASE THEN
文の束を記述する必要がありますする方法はあり
いいえ、単なる値です。さらに、複数の列を使用して複数の列の名前を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を確認してください。あなたが望むものを達成するための唯一の方法は、ケースを複製であるので
しかし、 'THEN'節でユーザ定義の値を更新したいのですが? – modulitos
@ルーカスええと、あなたが何を言っているのか分かりません。おそらくそれは別の質問であるはずです –
MySQLがDRYの原則を毎週違反する方法のもう1つの例です。他の言語を学ぶ前に、MySQLを学ぶことで悪い習慣を身につけることができるという大胆な主張をするように近づいています。 –
号CASE文は唯一、単一の値を返すことができます...
データベースサーバが最適化され、上一度だけチェックを実行する必要があります同じ条件...
すべてを実行することができますが、それは常にあなたが何をしたいかによって異なります。以下では、データを配列として取得し、必要な処理を行った直後の作業例を示します。
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
あなたは可能性があり、私はそれをお勧めしません。複数の列を連結して後で解析する 'THEN books.id1 | '、' books.id2 ...'はあなたがしようとしていること全体にかかっています。これにより、複数の値が返され、エイリアスとして1つの問題を取り除くことができます。これは1つの値を返すためです。 – xQbert
お時間をいただきありがとうございます。それをどうやって行うのか説明できますか? –
booksid1 ...がそれぞれ1,2,3の場合、CONCAT(books.ID1、 '、'、books.id2、 '、' bookxId ...)は1、2、3を返します。 – xQbert