登录
首页 >  数据库 >  MySQL

在MySQL里写个生成select语句的SQL

来源:SegmentFault

时间:2023-02-25 09:24:02 435浏览 收藏

本篇文章向大家介绍《在MySQL里写个生成select语句的SQL》,主要包括MySQL,具有一定的参考价值,需要的朋友可以参考一下。

最近遇到一个需求,一个表里有50个字段左右。我需要写一个详情接口,把这些字段都查出来。我想这很简单呀,我直接select * 不就好了嘛。于是我就这样干了

select * from foo;

嗯,似乎很完美,但是突然发现,这个表里有个敏感字段的内容是不能输出的,也就是我得从其中去掉一个字段。那就麻烦了,我可不想select column1,column2,column3,column4, 这样一个个写,要是这样一个个的写完,这么多的字段,我手都得残废了。我就想能不能写个SQL来自动拼接字段名称。答案当然是可以的,我们来看看这个SQL

select GROUP_CONCAT(concat('`', COLUMN_NAME,'`')) from information_schema.`COLUMNS`
    where TABLE_SCHEMA='dbname' and TABLE_NAME='tablename';

对的,就这样就可以了。这下舒服了。
当然SQL语句前面的 select 后面 from 和where 就根据自己的实际需要来补充了。

简单说明一下,使用上面SQL的时候要把dbname换成你的数据库的名称,tablename换成表名。比如我们查wordpress的wp_user表。

mysql> select GROUP_CONCAT(concat('`', COLUMN_NAME,'`')) from information_schema.`COLUMNS` where TABLE_SCHEMA='blog' and TABLE_NAME='wp_users';
+--------------------------------------------------------------------------------------------------------------------------------------------+
| GROUP_CONCAT(concat('`', COLUMN_NAME,'`'))                                                                                                 |
+--------------------------------------------------------------------------------------------------------------------------------------------+
| `ID`,`user_login`,`user_pass`,`user_nicename`,`user_email`,`user_url`,`user_registered`,`user_activation_key`,`user_status`,`display_name` |
+--------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.06 sec)

有人说,要不要解析一下这个SQL。好的,这就解析一下

  1. 从information_schema.
    COLUMNS
    这个表里把所有的字段名称查出来,就是 COLUMN_NAME 这个字段。
  2. 通过concat函数,给字段名前后加上`这个字符
  3. 通过 group_concat这个函数,拼接成一行。

到这里,我们也就讲完了《在MySQL里写个生成select语句的SQL》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于mysql的知识点!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>