Chociaż wielu twierdzi, że najlepszą praktyką jest jawne wymienienie każdej kolumny, która ma zostać zwrócona, są sytuacje, w których możesz chcieć zaoszczędzić czas i pominąć niektóre kolumny w wynikach (np. testowanie). Poniżej podałem dwie opcje, które rozwiązują ten problem.
1. Utwórz funkcję który pobiera wszystkie żądane nazwy kolumn:( utworzyłem schemat o nazwie funkcje do przechowywania tej funkcji)
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
Utwórz i wykonaj instrukcję select:
SET @sql = concat('SELECT ', (SELECT
functions.getTableColumns('test', 'employees', 'age,dateOfHire')), ' FROM test.employees');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
2. LUB bez pisania funkcji możesz:
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;
*Zastąp test własną nazwą schematu
**Zastąp pracowników własną nazwą stołu
***Zastąp wiek,datęzatrudnienia kolumnami, które chcesz pominąć (możesz pozostawić puste, aby zwrócić wszystkie kolumny lub po prostu wpisać jedną nazwę kolumny, aby pominąć)
** **Możesz dostosować długość varcharów w funkcji do swoich potrzeb