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这个库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值