MySQLのクエリで特定のカラム以外の全てのカラムをSELECTしたい

目的

MySQLのクエリで、あるカラム以外の全てのカラムをSELECTしたい

方法

INFORMATION_SCHEMA.COLUMNSを使う

  • 以下のSQLで目的のカラムが得られる
SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), '<columns_to_omit>,', '') 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '<table>' AND TABLE_SCHEMA = '<database>'
  • これとCONCATを使って下記の要領でSQLを組み立てて実行する
SET @sql = CONCAT('SELECT ', (SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), '<columns_to_omit>,', '') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '<table>' AND TABLE_SCHEMA = '<database>'), ' FROM <table>');
 
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;

参考リンク