我想要用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
是相矛盾的,对吧? :)
您可以使用另一列来存储其他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获得更多信息。
但是如果你想更新'THEN'子句中的用户定义值呢? – modulitos 2014-06-03 11:16:46
@Lucas嗯,不知道你在说什么。最有可能的应该是一个不同的问题 – 2014-06-03 14:52:54
另一个例子,说明MySQL每周如何违反DRY原则。我感到自己越来越接近于在学习任何其他语言之前,学习MySQL的大胆声明可以帮助您养成不良习惯。 – 2017-01-03 21:36:09
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
你能;但我不推荐它;将多个列连接在一起,然后解析出来'THEN books.id1 |','| books.id2 ...'只取决于你想要做什么。这将消除多个值作为一个返回和别名的问题。因为它会返回1个值。 – xQbert 2012-04-14 18:21:45
感谢您的时间。你能解释一下怎么做吗? – 2012-04-15 09:42:56
如果booksid1 ...分别为1,2,3,CONCAT(books.ID1,',',books.id2,','bookxId ...)将返回1,2,3。 – xQbert 2012-04-15 14:37:16