ในการสร้างชื่อคอลัมน์เพื่อใช้ในแบบสอบถาม คุณต้องใช้ตัวแปรที่ผู้ใช้กำหนดด้วยคำสั่ง set ไวยากรณ์มีดังนี้ −
SET @anyVariableName :=( SELECT CONCAT ( "SELECT", GROUP_CONCAT(CONCAT("\n 1 as ", COLUMN_NAME) SEPARATOR ','), "\n FROM DUAL") FROM INFORMATION_SCHEMA_COLUMNS WHERE TABLE_NAME='yourTableName' );
ตอนนี้เตรียมคำสั่งโดยใช้คำสั่ง PREPARE ไวยากรณ์มีดังนี้ −
เตรียม anyVariableName จาก @anyVariableName;
ดำเนินการคำสั่งโดยใช้คำสั่ง EXECUTE ไวยากรณ์มีดังนี้ −
ดำเนินการใดๆVariableName;
Deallocate คำสั่งที่เตรียมไว้โดยใช้คำสั่ง DEALLOCATE ไวยากรณ์มีดังนี้ −
DEALLOCATE PREPARE anyVariableName;
ตอนนี้เราจะสร้างตารางที่มีสองคอลัมน์และคอลัมน์จะถูกใช้ในคิวรี concat แบบสอบถามเพื่อสร้างตารางมีดังนี้ −
mysql> สร้างตาราง ConcatenationWithUserDefinedVariable -> ( -> Id int NOT NULL AUTO_INCREMENT, -> User_Id int, -> PRIMARY KEY(Id) -> );Query OK, 0 แถวได้รับผลกระทบ (1.14 วินาที)
ใช้ไวยากรณ์ด้านบนสำหรับชื่อคอลัมน์ที่จะใช้ในแบบสอบถาม แบบสอบถามมีดังนี้ −
mysql> set @q :=( -> select concat( -> "select", -> group_concat(concat("\n 1 as ", column_name) separator ','), -> "\nfrom dual" ) -> จาก information_schema.columns -> โดยที่ table_name ='ConcatenationWithUserDefinedVariable'); ตกลง ตกลง 0 แถวได้รับผลกระทบ (0.01 วินาที)
แบบสอบถามเพื่อเตรียมตัวแปรที่ผู้ใช้กำหนดข้างต้นมีดังนี้ −
mysql> เตรียม stmt จาก @q;Query OK, 0 แถวได้รับผลกระทบ (0.00 วินาที) เตรียมคำสั่ง
ตอนนี้ดำเนินการคำสั่งที่เตรียมไว้ข้างต้น แบบสอบถามมีดังนี้ −
mysql> รัน stmt;
ต่อไปนี้เป็นผลลัพธ์ -
<ก่อนหน้า>+----+---------+| รหัส | User_Id |+----+---------+| 1 | 1 |+----+---------+1 แถวในชุด (0.00 วินาที)ในท้ายที่สุด คุณต้องจัดสรรคืนคำสั่งที่เตรียมไว้ แบบสอบถามมีดังนี้ −
mysql> deallocate prepare stmt;Query OK, 0 แถวได้รับผลกระทบ (0.00 วินาที)