今天在项目中,要查询一个表。这个表中有几十个字段。但是要把其中的一个特殊处理。
这个该怎么办呢?查来查去,SQL 中没有排除某一些字段的语句,只能单独写一些语句来处理;
基本思路:对于MySQL数据库有 information_schema 库中存着数据该的一些基础信息。
1、从这个库中的 COLUMNS (记录各个表的所有字段)表中取出指定数据表的所有字段,再排除不需要的字段,并存在变量中。
2、拼接SQL语句,并把变量带入(这里拼接完成后需要再赋到另一个变量)。
3、执行拼接的SQL语句。
--1、取出指定数据表的所有字段,再排除不需要的字段,并存在变量中(ztjg_gd:你要查询的表,spatital_data:你要排除的字段)
SET @str := ( SELECT GROUP_CONCAT( s.column_name ) FROM information_schema.`COLUMNS` s WHERE s.table_name = 'ztjg_gd' AND s.column_name <> 'spatial_data' );
--2、拼接SQL语句,并把变量带入
SET @v_sql = concat( 'select ', @str, ',ASTEXT(zd.spatial_data) AS spatial_data from ztjg_gd zd WHERE zd.id = 3 AND zd.is_deleted = 0' ); SET @e_sql = @v_sql; --这一句必需,不然下面查询就有问题 --3、执行拼接的SQL语句
PREPARE stmt
FROM
@e_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
到这里,整个的查询就完成了。