Computer >> Máy Tính >  >> Lập trình >> MySQL

MySQL concat () để tạo tên cột được sử dụng trong một truy vấn?

Để tạo tên cột được sử dụng trong truy vấn, bạn cần sử dụng biến do người dùng xác định với lệnh set. Cú pháp như sau -

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’
);

Bây giờ chuẩn bị câu lệnh bằng cách sử dụng lệnh PREPARE. Cú pháp như sau -

PREPARE anyVariableName from @anyVariableName;

Thực thi câu lệnh bằng lệnh EXECUTE. Cú pháp như sau -

EXECUTE anyVariableName;

Phân bổ câu lệnh đã chuẩn bị bằng lệnh DEALLOCATE. Cú pháp như sau -

DEALLOCATE PREPARE anyVariableName;

Bây giờ chúng ta sẽ tạo một bảng có hai cột và cột sẽ được sử dụng trong truy vấn concat. Truy vấn để tạo bảng như sau -

mysql> create table ConcatenationWithUserDefinedVariable
   -> (
   -> Id int NOT NULL AUTO_INCREMENT,
   -> User_Id int,
   -> PRIMARY KEY(Id)
   -> );
Query OK, 0 rows affected (1.14 sec)

Sử dụng cú pháp trên cho các tên cột được sử dụng trong truy vấn. Truy vấn như sau -

mysql> set @q := (
   -> select concat(
   -> "select",
   -> group_concat(concat("\n 1 as ", column_name) separator ','),
   -> "\nfrom dual")
   -> from information_schema.columns
   -> where table_name = 'ConcatenationWithUserDefinedVariable');
Query OK, 0 rows affected (0.01 sec)

Truy vấn để chuẩn bị biến do người dùng xác định ở trên như sau -

mysql> prepare stmt from @q;
Query OK, 0 rows affected (0.00 sec)
Statement prepared

Bây giờ thực hiện câu lệnh đã chuẩn bị ở trên. Truy vấn như sau -

mysql> execute stmt;

Sau đây là kết quả -

+----+---------+
| Id | User_Id |
+----+---------+
|  1 |       1 |
+----+---------+
1 row in set (0.00 sec)

Cuối cùng, bạn cần phân bổ lại câu lệnh đã chuẩn bị. Truy vấn như sau -

mysql> deallocate prepare stmt;
Query OK, 0 rows affected (0.00 sec)