MySQL 查询排除指定字段、自定义变量、动态执行SQL
今天在项目中,要查询一个表。这个表中有几十个字段。但是要把其中的一个特殊处理。
这个该怎么办呢?查来查去,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;
到这里,整个的查询就完成了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端