Mysql库 查询 排除固定的某几个字段(如create_time,update_time这种) 因为有很多表 想将表名作为参数动态地查询 但这些表的其余字段又是不一致的 怎样建立查询语句可以固定排除这些不想要的字段呢
类似 SELECT * EXCEPT(a,b) FROM table 这样
Mysql库 查询 排除固定的某几个字段(如create_time,update_time这种) 因为有很多表 想将表名作为参数动态地查询 但这些表的其余字段又是不一致的 怎样建立查询语句可以固定排除这些不想要的字段呢
类似 SELECT * EXCEPT(a,b) FROM table 这样
第一种:动态 SQL(结合预处理语句)
SET @table_name = 'my_table'; -- 表名
SET @exclude_column = 'id,create_time,update_time'; -- 排除字段
SET @result_column = (SELECT group_concat(COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table_name
AND FIND_IN_SET(COLUMN_NAME, @exclude_column) = 0); -- 获取结果字段
SET @sql = CONCAT('SELECT ', @result_column, ' FROM ', @table_name); -- 拼接sql
PREPARE stmt FROM @sql; -- 预编译
EXECUTE stmt; -- 执行
DEALLOCATE PREPARE stmt; -- 释放预编译
第二种:表名是动态的,其实字段也可以是动态的,查询通过程序判断。
比如将mysql中的INFORMATION_SCHEMA.TABLES(表和视图信息) 和 INFORMATION_SCHEMA.COLUMNS(字段信息) 存到redis缓存中,执行查询时判断表和字段是否存在。
https://blog.csdn.net/yilovexing/article/details/107068569
第三种:使用 select * 返回全部字段,结果通过程序过滤。
使用 INFORMATION_SCHEMA 动态生成查询
SET @sql = NULL;
SELECT
GROUP_CONCAT(COLUMN_NAME) INTO @sql
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'your_table'
AND TABLE_SCHEMA = 'your_database'
AND COLUMN_NAME NOT IN ('field_to_exclude1', 'field_to_exclude2');
SET @sql = CONCAT('SELECT ', @sql, ' FROM your_table');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
4 回答1.3k 阅读✓ 已解决
8 回答1.2k 阅读
3 回答1k 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.3k 阅读
1 回答865 阅读✓ 已解决
1 回答657 阅读✓ 已解决
🚀 MySQL: 实现
SELECT * EXCEPT (a, b)
的动态查询MySQL 不支持 BigQuery 中
SELECT * EXCEPT (a, b)
这样的语法,但可以通过 动态 SQL +information_schema
来实现类似的功能。✅ 实现思路:
information_schema.columns
获取指定表的所有字段名。create_time
和update_time
。SELECT
语句,然后执行。🧩 示例 SQL(适用于 MySQL)
假设要查询表
your_table
,排除字段create_time
和update_time
:🧠 针对有很多表
可以封装成一个 存储过程,传入表名作为参数,自动排除指定字段并执行查询。
完整 SQL:存储过程实现
调用方式