Mysql select only column 有数据
Posted
技术标签:
【中文标题】Mysql select only column 有数据【英文标题】:Mysql select only column has data 【发布时间】:2013-06-21 08:40:15 【问题描述】:我想只选择 mysql 中只有数据的列。
例如,我有 table1 作为以下:
Table1
NAME VAL1 VAL2 VAL3 VAL4
A 1 2
B 2 3
C 3 3
从 Table1 中选择名称、val1、val2、val3、val4;
如何在 mysql 中只选择 Name,val1,val2 ?
Result:
Table1
NAME VAL1 VAL2
A 1 2
B 2 3
C 3 3
问候
【问题讨论】:
从 table1 中选择名称、val1、val2? 不,我想全选但不包括空列 怎么办?你能告诉我吗? 如果只有一行在其中一列中有 NULL 值,您会期待什么?例如NAME = 'A' with VAL2 = null? 这个重复:- ***.com/questions/2219870/… 【参考方案1】:您必须处理null
值,而您试图实现的目标是不可能的。因为您无法预测在执行语句之前有多少列不会是NULL
。
在 php 或其他语言中有许多简单的方法,可以根据您的需要整理结果。
【讨论】:
你只是忽略它们..if (is_null($result['val1']))
在 PHP 中,或 IFNULL(val1, 'val1 is null');
在 MySQL 中【参考方案2】:
你可以像这样选择这两列
SELECT name, CONCAT_WS(',',VAL1,val2,val3,val4) as vals FROM `table1`
demo
然后在php中将它们分开
【讨论】:
他也想要val3
,但前提是它没有包含null
的行。如果 1 行有 null
值,他不想要 val2
。没有包含“有可能”的简单 MySQL 答案
是的,DanFromGermany 正确你说的没错。我选择所有但不包括空列。
你的问题很好,但答案很简单,你做不到。你需要找到一种不同的方法来解决你的问题。【参考方案3】:
实际上不可能,因为您希望在每行上返回不同数量的列,而 MySQL 未设置为执行此操作。因此,这是一个演示问题。
除此之外,您还可以返回分组到单个记录中的所有非空字段。
SELECT NAME, GROUP_CONCAT(CONCAT_WS(' - ',
IF(VAL1 IS NULL, NULL, CONCAT('VAL1=', VAL1)),
IF(VAL2 IS NULL, NULL, CONCAT('VAL2=', VAL2)),
IF(VAL3 IS NULL, NULL, CONCAT('VAL3=', VAL3)),
IF(VAL4 IS NULL, NULL, CONCAT('VAL4=', VAL4))))
FROM Table1
虽然使用起来很糟糕。
【讨论】:
以上是关于Mysql select only column 有数据的主要内容,如果未能解决你的问题,请参考以下文章
已解决SELECT list is not in GROUP BY clause and contains nonaggregated column
mysql报错Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column问题(示例
mysql报错Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column问题(示例
#1055 - Expression of SELECT list is not in GROUP BY clause and contains nonaggregated column this i
Mysql运行SQL文件 错误Incorrect table definition;there can be only one TIMESTAMP column with CURRENT_TIMES