Untuk mencipta nama lajur untuk digunakan dalam pertanyaan, anda perlu menggunakan pembolehubah yang ditentukan pengguna melalui arahan yang ditetapkan. Sintaks adalah seperti berikut -
SET @anyVariableName := ( SELECT CONCAT ( "SELECT", GROUP_CONCAT(CONCAT(" 1 as ", COLUMN_NAME) SEPARATOR ','), " FROM DUAL") FROM INFORMATION_SCHEMA_COLUMNS WHERE TABLE_NAME= ‘yourTableName’ );
Sekarang gunakan arahan PREPARE untuk menyediakan pernyataan. Sintaksnya adalah seperti berikut -
PREPARE anyVariableName from @anyVariableName;
Gunakan arahan EXECUTE untuk melaksanakan pernyataan. Sintaksnya adalah seperti berikut -
EXECUTE anyVariableName;
Gunakan arahan DEALLOCATE untuk menyamakan kedudukan kenyataan yang disediakan. Sintaksnya adalah seperti berikut -
DEALLOCATE PREPARE anyVariableName;
Kami kini akan mencipta jadual dengan dua lajur dan lajur ini akan digunakan dalam pertanyaan gabungan. Pertanyaan untuk mencipta jadual adalah seperti berikut -
mysql> create table ConcatenationWithUserDefinedVariable -> ( -> Id int NOT NULL AUTO_INCREMENT, -> User_Id int, -> PRIMARY KEY(Id) -> ); Query OK, 0 rows affected (1.14 sec)
Gunakan sintaks di atas untuk nama lajur yang akan digunakan dalam pertanyaan. Pertanyaannya adalah seperti berikut -
mysql> set @q := ( -> select concat( -> "select", -> group_concat(concat(" 1 as ", column_name) separator ','), -> "from dual") -> from information_schema.columns -> where table_name = 'ConcatenationWithUserDefinedVariable'); Query OK, 0 rows affected (0.01 sec)
Menyediakan pertanyaan untuk pembolehubah yang ditentukan pengguna di atas adalah seperti berikut -
mysql> prepare stmt from @q; Query OK, 0 rows affected (0.00 sec) Statement prepared
Sekarang laksanakan pernyataan yang disediakan di atas. Pertanyaannya adalah seperti berikut -
mysql> execute stmt;
Berikut adalah output -
+----+---------+ | Id | User_Id | +----+---------+ | 1 | 1 | +----+---------+ 1 row in set (0.00 sec)
Akhir sekali, anda perlu mengeluarkan kenyataan yang disediakan. Pertanyaannya adalah seperti berikut -
mysql> deallocate prepare stmt; Query OK, 0 rows affected (0.00 sec)
Atas ialah kandungan terperinci MySQL concat() mencipta nama lajur untuk digunakan dalam pertanyaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!