Mens mange siger, at det er den bedste praksis eksplicit at angive hver kolonne, du ønsker returneret, er der situationer, hvor du måske vil spare tid og udelade bestemte kolonner fra resultaterne (f.eks. test). Nedenfor har jeg givet to muligheder, der løser dette problem.
1. Opret en funktion der henter alle de ønskede kolonnenavne:(Jeg oprettede et skema kaldet funktioner til at holde denne funktion)
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
Opret og udfør select-sætning:
SET @sql = concat('SELECT ', (SELECT
functions.getTableColumns('test', 'employees', 'age,dateOfHire')), ' FROM test.employees');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
2. ELLER uden at skrive en funktion kan du:
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;
*Erstat testen med dit eget skemanavn
**Erstat medarbejdere med dit eget bordnavn
***Erstat age,dateOfHire med de kolonner, du vil udelade (du kan lade den stå tom for at returnere alle kolonner eller blot indtaste et kolonnenavn for at udelade)
** **Du kan justere længden af varchars i funktionen for at imødekomme dine behov