Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL concat () เพื่อสร้างชื่อคอลัมน์เพื่อใช้ในแบบสอบถาม?


ในการสร้างชื่อคอลัมน์เพื่อใช้ในแบบสอบถาม คุณต้องใช้ตัวแปรที่ผู้ใช้กำหนดด้วยคำสั่ง 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 วินาที)