mysql获取列,但不包括空列
我想从tbl1中选择所有列,但不选择MySQL存储过程中有空数据的列 我的结构如下:mysql获取列,但不包括空列,mysql,stored-procedures,Mysql,Stored Procedures,我想从tbl1中选择所有列,但不选择MySQL存储过程中有空数据的列 我的结构如下: tbl1 Name val1 val2 val3 val4 a 1 2 b 4 4 c 5 7 e 7 6 从tbl1中选择*其中 Result: Name val1 val3 a 1 2 b 4 4 c
tbl1
Name val1 val2 val3 val4
a 1 2
b 4 4
c 5 7
e 7 6
从tbl1中选择*其中
Result:
Name val1 val3
a 1 2
b 4 4
c 5 7
e 7 6
这是你可以做到的。假设by…列中有空数据。。。您指的是所有行都具有
NULL
值的列
分隔符$$
创建程序sp_select()
开始
设置@tbl='tbl1',@sql=NULL,@cols=NULL;
挑选
组_CONCAT(
海螺(
“选择“””,
`列名称`,
''姓名,计数('',
`列名称“,”)n从“,”,
@tbl
)
分隔符“UNION ALL”)转换为@sql
从信息_SCHEMA.COLUMNS
其中表_name=@tbl;
SET@sql=CONCAT(
'将组_CONCAT(名称)选择为@cols FROM(',
@sql,
“)q其中q.n>0”
);
从@sql准备stmt;
执行stmt;
设置@sql=CONCAT('SELECT',@cols','FROM',@tbl);
从@sql准备stmt;
执行stmt;
解除分配准备stmt;
结束$$
定界符;
然后你调用程序
调用sp_select();
你会得到
+------+------+------+
| Name | val1 | val3 |
+------+------+------+
| a | 1 | 2 |
| b | 4 | 4 |
| c | 5 | 7 |
| e | 7 | 6 |
+------+------+------+
+------+------+------+
|名称| val1 | val3|
+------+------+------+
|a | 1 | 2|
|b | 4 | 4|
|c | 5 | 7|
|e | 7 | 6|
+------+------+------+
下面是演示。如果某个列被部分填充,该怎么办?为什么需要这个?你想达到什么目标?在SQL中,对象标识符(表、列名等)是常量文本。您不能在普通查询中使用或注入它们。您可以使用动态SQL克服这一问题,但它真的值得吗?