Rumah  >  Artikel  >  pangkalan data  >  MySQL concat() mencipta nama lajur untuk digunakan dalam pertanyaan?

MySQL concat() mencipta nama lajur untuk digunakan dalam pertanyaan?

PHPz
PHPzke hadapan
2023-09-16 20:09:08728semak imbas

MySQL concat() 创建要在查询中使用的列名?

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam