Mysql 如何仅选择sql值不为null的列

Mysql 如何仅选择sql值不为null的列,mysql,sql,Mysql,Sql,我有一个表,它有多个列,可以是null,也可以是值。我只想得到那些有值的列 我尝试在SELECT子句中使用IF: 但这不是我想要的结果,因为我在一开始就解释了。 我也试过一个案例,但结果相同。​ 编辑: 例如,假设我们有这个表。 将始终显示第1列 COLUMN1 COLUMN2 COLUMN3 COLUMN4 COLUMN 5 -------------------------------------------- NAME1 NULL VALUE VALUE

我有一个表,它有多个列,可以是null,也可以是值。我只想得到那些有值的列

我尝试在SELECT子句中使用IF:

但这不是我想要的结果,因为我在一开始就解释了。 我也试过一个案例,但结果相同。​

编辑:

例如,假设我们有这个表。 将始终显示第1列

COLUMN1  COLUMN2  COLUMN3  COLUMN4  COLUMN 5
--------------------------------------------
NAME1    NULL     VALUE    VALUE    NULL
NAME2    VALUE    NULL     VALUE    NULL
NAME3    VALUE    VALUE    NULL     VALUE
始终使用相同的查询并仅更改此WHERE子句 …其中第1列类似于“名称1”;我想要下一个输出

COLUMN1  COLUMN3  COLUMN4
-------------------------
NAME1    VALUE    VALUE
另一个例子:…其中第1列类似于'NAME3'

T-SQL:


它选择此列1和列2的第一个非null的值。您可以使用IFNULL语句检查null并获取备用列

SELECT IFNULL(column1,column2) value
FROM TABLE1

SQL查询在返回的列中是固定的。因此,您无法使用简单的select查询来完成所需的操作。您可以使用动态SQL

但是,只能以单个字符串的形式返回所需的值:

select name, concat_ws(',', column1, column2, column3, column4, column5, column6)
from t
where . . . ;
也就是说,真正的问题可能是您的数据结构。通常,您不希望以数据透视形式存储此类列值。相反,每行包含一个值。换句话说,您需要一个每个值和每个名称都有一行的连接/关联表

那么查询将是:

select name, group_concat(value)
from association_table 
group by name;

您每次都在测试同一列。SELECT查询的结果是一个表,并且每行中的列数必须相同。如果存在不同数量的非空列,您希望得到什么结果?COALESCE函数可能会有所帮助。COALESCEcol1,col2,col3,col4,col5返回列表中第一个非空列的值。我更改了名称,因此它是泛型的,而我忘记了更改数字。每一行都是不同的列,请添加示例数据和预期输出,这样人们就不会在知道确切问题之前猜测并给出答案。这将非常有帮助。如果您有许多列,并且希望获取第一个非空值,请使用@developer_29的回答:从表中选择COALESCEcolumn1、column2、column3。这将获取第一个非空值的列。我已经使用了此选项并查看了手册,但这不是我要查找的。
SELECT IFNULL(column1,column2) value
FROM TABLE1
select name, concat_ws(',', column1, column2, column3, column4, column5, column6)
from t
where . . . ;
select name, group_concat(value)
from association_table 
group by name;