Въпреки че мнозина казват, че е най-добрата практика да изброите изрично всяка колона, която искате да бъде върната, има ситуации, в които може да искате да спестите време и да пропуснете определени колони от резултатите (например тестване). По-долу съм дал две опции, които решават този проблем.
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
Създайте и изпълнете оператор за избор:
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;
*Заменете теста със собствено име на схема
**Заменете служителите със собствено име на таблица
***Заменете age,dateOfHire с колоните, които искате да пропуснете (можете да оставите празно, за да върнете всички колони или просто въведете едно име на колона, за да пропуснете)
** **Можете да регулирате дължините на varchars във функцията, за да отговарят на вашите нужди