Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql获取列,但不包括空列_Mysql_Stored Procedures - Fatal编程技术网

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中选择所有列,但不选择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      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克服这一问题,但它真的值得吗?