Während viele sagen, dass es am besten ist, jede Spalte, die Sie zurückgeben möchten, explizit aufzulisten, gibt es Situationen, in denen Sie möglicherweise Zeit sparen und bestimmte Spalten aus den Ergebnissen auslassen möchten (z. B. Tests). Unten habe ich zwei Optionen angegeben, die dieses Problem lösen.
1. Funktion erstellen das alle gewünschten Spaltennamen abruft:(Ich habe ein Schema namens functions erstellt, um diese Funktion zu halten)
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-Anweisung erstellen und ausführen:
SET @sql = concat('SELECT ', (SELECT
functions.getTableColumns('test', 'employees', 'age,dateOfHire')), ' FROM test.employees');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
2. ODER ohne eine Funktion zu schreiben, könnten Sie:
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 durch Ihren eigenen Schemanamen ersetzen
**Mitarbeiter durch Ihren eigenen Tabellennamen ersetzen
***Ersetzen Sie age,dateOfHire durch die Spalten, die Sie weglassen möchten (Sie können es leer lassen, um alle Spalten zurückzugeben, oder geben Sie einfach einen Spaltennamen ein, der weggelassen werden soll)
** **Du kannst die Länge der Varchars in der Funktion an deine Bedürfnisse anpassen