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

MySQL Others--select @@tx_read_only 执行频率较高问题