I když mnozí říkají, že je osvědčeným postupem výslovně uvést každý sloupec, který chcete vrátit, existují situace, kdy možná budete chtít ušetřit čas a některé sloupce z výsledků vynechat (např. testování). Níže jsem uvedl dvě možnosti, které tento problém řeší.
1. Vytvořit funkci který načte všechny požadované názvy sloupců:(Vytvořil jsem schéma nazvané funkce, které tuto funkci drží)
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
Vytvořte a spusťte příkaz select:
SET @sql = concat('SELECT ', (SELECT
functions.getTableColumns('test', 'employees', 'age,dateOfHire')), ' FROM test.employees');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
2. NEBO bez psaní funkce byste mohli:
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;
*Nahraďte test vlastním názvem schématu
**Nahraďte zaměstnance vlastním názvem tabulky
***Nahraďte age,dateOfHire sloupci, které chcete vynechat (můžete je nechat prázdné, chcete-li vrátit všechny sloupce, nebo stačí zadat název jednoho sloupce, který chcete vynechat)
** **Délky varcharů ve funkci můžete upravit tak, aby vyhovovaly vašim potřebám