INFORMATION_SCHEMAを使用して列名と値を動的に設定する方法
MariaDBで列名と値を動的に設定する方法
クエリパラメータを使用する
これは、列名と値を直接クエリに渡す最も簡単な方法です。
SELECT ?, ? FROM table_name;
-- 例
SET @column_name = 'name';
SET @value = 'John Doe';
CALL my_procedure(@column_name, @value);
ストアドプロシージャは、列名と値を動的に設定するために使用できる再利用可能なコードブロックです。
CREATE PROCEDURE my_procedure (
IN column_name VARCHAR(255),
IN value VARCHAR(255)
)
BEGIN
SET @sql = CONCAT('SELECT ', column_name, ' FROM table_name WHERE ', column_name, ' = ?', ';');
-- 例
SET @column_name = 'name';
SET @value = 'John Doe';
CALL my_procedure(@column_name, @value);
動的SQLを使用すると、実行時にクエリ文字列を構築できます。
SET @sql = CONCAT('SELECT ', column_name, ' FROM table_name WHERE ', column_name, ' = ?', ';');
-- 例
SET @column_name = 'name';
SET @value = 'John Doe';
PREPARE stmt FROM @sql;
EXECUTE stmt USING @value;
ユーザー変数を使用する
ユーザー変数は、列名と値を一時的に保存するために使用できます。
SET @column_name = 'name';
SET @value = 'John Doe';
SELECT @column_name, @value FROM table_name;
注: 上記の例は、MariaDB 10.4.2 でテストされています。他のバージョンの MariaDB では、構文が異なる場合があります。
-- テーブル作成
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
-- データ挿入
INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]');
INSERT INTO users (name, email) VALUES ('Jane Doe', '[email protected]');
-- 列名と値を動的に設定
SET @column_name = 'name';
SET @value = 'John Doe';
-- クエリ実行
SELECT ? FROM users WHERE ? = ?;
-- 結果
-- John Doe
ストアドプロシージャを使用する
-- ストアドプロシージャ作成
CREATE PROCEDURE my_procedure (
IN column_name VARCHAR(255),
IN value VARCHAR(255)
)
BEGIN
SET @sql = CONCAT('SELECT ', column_name, ' FROM users WHERE ', column_name, ' = ?', ';');
PREPARE stmt FROM @sql;
EXECUTE stmt USING @value;
END;
-- ストアドプロシージャ実行
SET @column_name = 'name';
SET @value = 'John Doe';
CALL my_procedure(@column_name, @value);
-- 結果
-- John Doe
動的SQLを使用する
-- 列名と値を動的に設定
SET @column_name = 'name';
SET @value = 'John Doe';
-- 動的SQLクエリ作成
SET @sql = CONCAT('SELECT ', column_name, ' FROM users WHERE ', column_name, ' = ?', ';');
-- クエリ実行
PREPARE stmt FROM @sql;
EXECUTE stmt USING @value;
-- 結果
-- John Doe
-- 列名と値を動的に設定
SET @column_name = 'name';
SET @value = 'John Doe';
-- クエリ実行
SELECT @column_name, @value FROM users;
-- 結果
-- name | John Doe
これらのサンプルコードは、MariaDBで列名と値を動的に設定する方法を理解するのに役立ちます。
INFORMATION_SCHEMA は、MariaDB のデータベースに関する情報を提供するデータベースです。
SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'table_name';
-- 例
SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'users';
-- 結果
-- id
-- name
-- email
JSONを使用する
JSON は、データ交換用の軽量なデータ形式です。
-- JSON データ
SET @json = '{"column_name": "name", "value": "John Doe"}';
-- JSON データを解析
SELECT JSON_EXTRACT(@json, '$.column_name') AS column_name,
JSON_EXTRACT(@json, '$.value') AS value;
-- 結果
-- column_name | value
-- name | John Doe
CASE 式を使用する
CASE 式は、条件に基づいて異なる値を返す式です。
SELECT CASE column_name
WHEN 'name' THEN 'John Doe'
WHEN 'email' THEN '[email protected]'
ELSE NULL
END AS value
FROM users;
-- 結果
-- value
-- John Doe
-- [email protected]
mariadb