ใน MySQL ไม่สามารถใช้ตัวแปรเป็นชื่อคอลัมน์โดยตรงในคำสั่ง SELECT ได้ ต้องใช้ Prepared Statement สร้างคำสั่ง SQL เป็นสตริง แล้วค่อย Execute
ตัวอย่างการสร้างตาราง
mysql> create table DemoTable (
EmployeeName varchar(100) );
Query OK, 0 rows affected (0.77 sec)
เพิ่มข้อมูล
mysql> insert into DemoTable values('John Doe');
Query OK, 1 row affected (0.18 sec)
ขั้นตอนการเลือกคอลัมน์แบบไดนามิก
mysql> set @dynamicQuery = CONCAT("SELECT ", (SELECT "EmployeeName from DemoTable"));
Query OK, 0 rows affected (0.00 sec)
mysql> select @dynamicQuery;
+---------------------------------------+
| @dynamicQuery |
+---------------------------------------+
| SELECT EmployeeName from DemoTable |
+---------------------------------------+
1 row in set (0.00 sec)
mysql> prepare myStatement from @dynamicQuery;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> execute myStatement;
ผลลัพธ์
+--------------+ | EmployeeName | +--------------+ | John Doe | +--------------+ 1 row in set (0.00 sec)
คำอธิบาย:
CONCAT()สร้างคำสั่ง SQL เป็นสตริงPREPAREคอมไพล์คำสั่ง SQL จากสตริงEXECUTEรันคำสั่งที่เตรียมไว้- สามารถ
DEALLOCATE PREPARE myStatement;เพื่อล้าง statement หลังใช้งาน
กรณีใช้งานจริง: เหมาะสำหรับแอปพลิเคชันที่ต้องให้ผู้ใช้เลือกคอลัมน์ที่จะแสดงผลแบบไดนามิก