我正在尝试使用CASE
语句选择多个值。我注意到我们做不到
CASE
WHEN wall.type="bk"
THEN books.id1,books.id2, // and so on
END as column_1,
有没有办法让THEN
包含多个列,或者我们需要简单地编写一堆CASE THEN
语句吗?这看起来很混乱
答案 0 :(得分:17)
不,这只是一个单一的价值。另外,使用“多列”并将这些多列命名为column_1
是对的,对吗? :)
您可以使用另一列来存储其他ID(类似情况)并使用空值来表示else
值,就像您现在正在做的那样。
示例:
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以获取更多信息。
答案 1 :(得分:4)
没有。 CASE语句只能返回一个值,所以实现你想要的唯一方法是复制大小写...
数据库服务器应该进行优化,并且只能执行一次相同条件的检查......
答案 2 :(得分: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
答案 3 :(得分:0)
根据文档mysql_doc;您可以根据需要使用case的其他语法。
case
WHEN FIND_IN_SET(edu, "1,1st,2,2nd,3,3rd,4,4th,5,5th,pri,primary,primery") THEN
SET memEdu = "Primary";
WHEN FIND_IN_SET(edu, "intermediate,inter,f.a,fa,fac,f.a.c,f.sc,fsc,1rd year,2rd year,3rd year") THEN
SET memEdu = "Intermediate";
End case;