多くの人が、返されるすべての列を明示的にリストすることがベストプラクティスであると言いますが、時間を節約し、結果から特定の列を省略したい場合があります(テストなど)。以下に、この問題を解決する2つのオプションを示します。
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
selectステートメントを作成して実行します:
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を省略したい列に置き換えます(空白のままにしてすべての列を返すか、1つの列名を入力して省略できます)
** **必要に応じて、関数内のvarcharの長さを調整できます