Mysql仅选择列包含数据
我只想选择mysql中只有数据的列 在示例中,表1如下所示: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
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列。您的问题很好,但答案很简单,您不能这样做。你需要找到一种不同的方法来解决你的问题。