mysql查询表,指定排除字段 博客分类: MYSQL mysql
查询user表中除email以外的所有字段
假设数据库bbs中有user表,字段如下
id,username,password,gender,email
-------------------------------------------------------------------------
在命令行窗口输入:
SET @sql =
CONCAT('SELECT ',
(
SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), if(instr(GROUP_CONCAT(COLUMN_NAME),'email,')>0,'email,',',email'), '')
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ='user' AND TABLE_SCHEMA = 'bbs'
),
' FROM user');
PREPARE stmt FROM @sql;
use bbs;
EXECUTE stmt;
---------------------------------------------------------------
解释:
下一步操作都基于上一步操作;
操作1
mysql> use bbs;
SELECT * FROM user;
+----+----------+----------+--------+--------------+
| id | username | password | gender | email |
+----+----------+----------+--------+--------------+
| 1 | jack | 670B1472 | male | jack@163.com |
操作2
mysql> SELECT COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='user' and TABLE_SCHEMA='bbs';
+-------------+
| column_name |
+-------------+
| id |
| username |
| password |
| gender |
| email |
+-------------+
从 INFORMATION_SCHEMA.COLUMNS 表中查找 数据库名为bbs且表名为user的列信息
操作3
mysql> SELECT GROUP_CONCAT(COLUMN_NAME ) from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='user' and TABLE_SCHEMA='bbs';
+-----------------------------------+
| GROUP_CONCAT(COLUMN_NAME ) |
+-----------------------------------+
| id,username,password,gender,email |
+-----------------------------------+
使用组函数GROUP_CONCAT连接COLUMN_NAME并以逗号作为分割符
操作4
mysql> SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME ),',email', '') from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='user' and TABLE_SCHEMA='bbs';
+--------------------------------------------------+
| REPLACE(GROUP_CONCAT(COLUMN_NAME ),',email', '') |
+--------------------------------------------------+
| id,username,password,gender |
+--------------------------------------------------+
把字符串"id,username,password,gender,email"中的",email"替换为空串""
操作5
最后将字符串“id,username,password,gender”前后分别拼接 "SELECT " 和 " FROM user"则可以得到结果
注意:因为排除的某个字段可能不是在最后,例如排除“id,username,password,gender,email”中的gender则要替换"gender,"所以要做这样的处理replace(str, if(instr(str, "email,")>0, "email,",",email"))---如果字符串中的列名后有逗号,则把逗号一并替换,否则只替换列名
另外,个人觉得这么处理可读性非常差,建议还是通过程序来实现。使用一些数据库工具库会方便一些,如果是用java可以使用DBUtils这个库
推荐阅读
-
mysql查询表,指定排除字段 博客分类: MYSQL mysql
-
mysql数据库分类之(DQL)查询表中的数据(3)
-
MySQL毫秒值和日期的指定格式的相互转换 博客分类: mysql mysql日期转换
-
mysql left join 多个表 博客分类: database MySQLSQLSQL ServerCC++
-
MySQL汉字字段按拼音排序 博客分类: 数据库 windowsmysqlshare
-
MySQL学习之——锁(行锁、表锁、页锁、乐观锁、悲观锁等) 博客分类: 数据库
-
游标中嵌套有其他查询时要注意的问题 博客分类: Mysql MySQL游标存储过程
-
Oracle创建视图、通过视图创建表 博客分类: mysql/oracle/sqlserver/db2/mongdb/redis/neo4j/GreenPlum/Teradata/hsqldb/Derby/sakila
-
SQL SERVER系统表和常用函数介绍 博客分类: mysql/oracle/sqlserver/db2/mongdb/redis/neo4j/GreenPlum/Teradata/hsqldb/Derby/sakila
-
Mysql 锁表 for update (引擎/事务) 博客分类: 数据库 mysqlfor update