ใช้ตัวแปร User-defined Variable พร้อมคำสั่ง SET เพื่อสร้างชื่อคอลัมน์แบบไดนามิก
ขั้นตอน
- สร้าง Query String ด้วย CONCAT และ GROUP_CONCAT จาก INFORMATION_SCHEMA.COLUMNS
- เตรียมคำสั่งด้วย
PREPARE - รันด้วย
EXECUTE - ลบ Prepared Statement ด้วย
DEALLOCATE PREPARE
รูปแบบไวยากรณ์
SET @q := (SELECT CONCAT('SELECT ', GROUP_CONCAT(CONCAT('\n 1 AS ', COLUMN_NAME) SEPARATOR ','), '\n FROM DUAL') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'yourTableName');
PREPARE stmt FROM @q;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
ตัวอย่างการใช้งาน
สร้างตาราง:
mysql> CREATE TABLE ConcatenationWithUserDefinedVariable ( Id INT NOT NULL AUTO_INCREMENT, User_Id INT, PRIMARY KEY(Id) );
สร้างและรัน Dynamic Query:
mysql> SET @q := (SELECT CONCAT('SELECT ', GROUP_CONCAT(CONCAT('\n 1 AS ', COLUMN_NAME) SEPARATOR ','), '\n FROM DUAL') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'ConcatenationWithUserDefinedVariable');
mysql> PREPARE stmt FROM @q;
mysql> EXECUTE stmt;
ผลลัพธ์:
+----+---------+ | Id | User_Id | +----+---------+ | 1 | 1 | +----+---------+
ลบ Prepared Statement:
mysql> DEALLOCATE PREPARE stmt;
เทคนิคนี้ใช้สร้างคำสั่ง SQL แบบไดนามิกจากข้อมูล Metadata ของตาราง