虽然许多人说最好明确列出要返回的每一列,但在某些情况下,您可能希望节省时间并从结果中省略某些列(例如测试)。下面我给出了解决这个问题的两个选项。
1.创建一个检索所有所需列名的函数:(我创建了一个名为函数的架构来保存此函数)
DELIMITER $$
CREATE DEFINER=`root`@`%` FUNCTION `getTableColumns`(_schemaName varchar(100), _tableName varchar(100), _omitColumns varchar(200)) RETURNS varchar(5000) CHARSET latin1
BEGIN
SELECT GROUP_CONCAT(COLUMN_NAME) FROM information_schema.columns
WHERE table_schema = _schemaName AND table_name = _tableName AND FIND_IN_SET(COLUMN_NAME,_omitColumns) = 0 ORDER BY ORDINAL_POSITION;
END
创建并执行select语句:
SET @sql = concat('SELECT ', (SELECT
functions.getTableColumns('test', 'employees', 'age,dateOfHire')), ' FROM test.employees');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
2。或者不写函数你可以:
SET @sql = CONCAT('SELECT ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM
information_schema.columns WHERE table_schema = 'test' AND table_name =
'employees' AND column_name NOT IN ('age', 'dateOfHire')),
' from test.eployees');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
*将 test 替换为您自己的架构名称
**用你自己的表名替换员工
***将 age,dateOfHire 替换为您要省略的列(您可以将其留空以返回所有列或只输入一个列名以省略)
** **您可以在函数中调整varchars的长度以满足您的需求