MySQL根据列值选择多列
Posted
技术标签:
【中文标题】MySQL根据列值选择多列【英文标题】:MySQL Select multiple column depending on column value 【发布时间】:2016-10-03 18:14:32 【问题描述】:我在 Internet 和整个 Stackoverlow 上搜索了两次,但没有找到可行的解决方案。
假设我有一个包含以下列的表格: a,b,c,d,e,f,g,h,i
a 是一个从 1 到 16 的整数 根据这个值,我必须选择是否选择 b-i。
示例: 如果 a = 1 我需要 b,c,d,e,i。如果 a = 2 我需要 e,g,h,i
所以我可以使用:
SELECT
CASE a WHEN 1 THEN b WHEN 2 THEN NULL ELSE NULL END as a
....
CASE a WHEN 1 THEN NULL WHEN 2 THEN g ELSE NULL END as g
没有更简单的方法吗:
CASE a When 1 (select b,c,d,e,i)?
额外愿望:我可以根据 a 的值选择 as 吗?示例
if a = 1 column b should be named "lol", if a = 2 b should be called "rofl".
【问题讨论】:
您不能为结果中的不同行返回不同数量的列。 @Barmar 好吧,您可以再次取消旋转和动态旋转。但是很乱。 这类问题是糟糕设计的典型表现。 检查这个,看看你的表是如何反透视的***.com/questions/15184381/… 【参考方案1】:我能想到的最接近您想要的是连接您想要的列:
SELECT CASE a
WHEN 1 THEN CONCAT_WS(', ', b, c, d, e, i)
WHEN 2 THEN CONCAT_WS(', ', e, g, h, i)
END AS result
另一种解决方案是使用UNION
SELECT a, b, c, d, e, i
FROM yourTable
WHERE a = 1
UNION
SELECT a, e, g, h, i, null
FROM yourTable
WHERE a = 2
请注意,您不能根据a
的值使用不同的列别名。整个查询只有一组列名。在UNION
中,它们来自第一个子查询中的列名或别名。
【讨论】:
是的。如果你想把东西放在它的位置,使用IFNULL(e, 'something')
我认为这个解决方案不是我最喜欢的。我需要在 php 中处理这些列,所以爆炸和重命名它们并不漂亮:( 希望有人有另一个想法......
我使用UNION
添加了另一个解决方案。
为什么不直接返回所有列,然后在PHP中区分大小写?
我正在考虑性能...选择 50 列(其中 20 列为空)并在 php 中使用它们或使用 mysql 选择 20 列是否有明显差异?以上是关于MySQL根据列值选择多列的主要内容,如果未能解决你的问题,请参考以下文章