日向夏特殊応援部隊

俺様向けメモ

カラム数の多いテーブルの SELECT 用にカラムを明示的に列挙する、または GROUP_CONCAT() が便利と言う話

カラム数が結構多いテーブルに対して SELECT * とは書きたく無くて明示的にカラム名を指定したいって時に徒手空拳で頑張って書いても良いんですけど、information_schema 使えば楽出来るよねーって話。

CREATE DATABASE akb48;
USE akb48;
CREATE TABLE members (
  id int(10) unsigned NOT NULL AUTO_INCREMENT,
  name varchar(32) NOT NULL,
  nickname varchar(32) NOT NULL,
  birthday datetime NOT NULL,
  created_on datetime NOT NULL,
  updated_on datetime NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

まぁこんなテーブルがあるとして、このテーブルのカラムを SELECT 句の為に列挙したい場合は、

SELECT GROUP_CONCAT(COLUMN_NAME SEPARATOR ', ') AS columns FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'akb48' AND TABLE_NAME = 'members' ORDER BY ORDINAL_POSITION ASC

とかやると、

*************************** 1. row ***************************
columns: id, name, nickname, birthday, created_on, updated_on
1 row in set (0.00 sec)

こんな具合にカラムが列挙出来ると。

結論として information_schema と言うより GROUP_CONCAT() が便利だねって話です。IN() の中身を抽出する際にも便利です!


id:nippondanji さんのブコメでありがたいご指摘があるんですが、group_concat_max_len を超えた数のレコードを GROUP_CONCAT() するとちょん切れちゃうので注意です。