Mysql仅选择列包含数据

Mysql仅选择列包含数据,mysql,stored-procedures,Mysql,Stored Procedures,我只想选择mysql中只有数据的列 在示例中,表1如下所示: Table1 NAME VAL1 VAL2 VAL3 VAL4 A 1 2 B 2 3 C 3 3 从表1中选择名称、val1、val2、val3、val4 如何在mysql中仅选择名称val1和val2 Result: Table1 NAME VAL1 VAL2 A 1 2 B 2 3 C 3 3

我只想选择mysql中只有数据的列

在示例中,表1如下所示:

Table1

NAME VAL1 VAL2 VAL3 VAL4
A   1     2
B   2     3
C   3     3    
从表1中选择名称、val1、val2、val3、val4

如何在mysql中仅选择名称val1和val2

Result:

    Table1

    NAME VAL1 VAL2 
    A    1     2
    B    2     3
    C    3     3    

关于

您必须处理
null
值,您试图实现的目标是不可能的。因为在执行语句之前,您无法预测有多少列不为空


在PHP或其他语言中,有许多简单的方法可以根据需要整理结果。

您可以这样选择这两列

   SELECT name, CONCAT_WS(',',VAL1,val2,val3,val4) as vals FROM `table1` 


然后在php中有效地将它们分开,这是不可能的,因为您希望在每一行上返回不同数量的列,而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

但是使用起来非常糟糕。

从表1中选择name、val1、val2?不,我想全部选择,但不包括空列。如何才能选择?你能告诉我吗?如果只有一行在其中一列中有空值,你会期望什么?e、 g.NAME='A'和VAL2=null?重复:-您只需忽略它们
if(在PHP中为null($result['val1'])
,或者
IFNULL(val1,'val1为null')在MySQLhe中也需要
val3
,但前提是它没有包含
null
的行。如果一行有
null
值,他不希望
val2
。没有包含“有可能”的简单MySQL答案是的,Danu说得对。我选择了all,但不包括null列。您的问题很好,但答案很简单,您不能这样做。你需要找到一种不同的方法来解决你的问题。