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

Làm cách nào để ánh xạ các khóa thành các giá trị cho một trường riêng lẻ trong một truy vấn chọn MySQL?

Bạn có thể sử dụng câu lệnh CASE trong MySQL để ánh xạ các khóa thành các giá trị cho một trường riêng lẻ trong truy vấn chọn. Cú pháp như sau -

SELECT yourColumnName1,yourColumnName2,yourColumnName3,.........N
(
   CASE WHEN yourColumnName = 1 THEN 'ENABLED'
   ELSE 'DISABLED'
   END
) AS anyVariableName
FROM yourTableName;

Bạn cũng có thể sử dụng hàm IF () cho cùng mục đích. Cú pháp như sau -

SELECT yourColumnName1,yourColumnName2,yourColumnName3,.........N
,IF(yourColumnName,'ENABLED','DISABLED') as anyVariableName FROM yourTableName;

Để hiểu cú pháp trên, chúng ta hãy tạo một bảng. Truy vấn để tạo bảng như sau -

mysql> create table MapKeys
   -> (
   -> Id int NOT NULL AUTO_INCREMENT,
   -> Name varchar(20),
   -> isActive boolean,
   -> PRIMARY KEY(Id)
   -> );
Query OK, 0 rows affected (0.65 sec)

Chèn một số bản ghi trong bảng bằng lệnh chèn. Truy vấn như sau -

mysql> insert into MapKeys(Name,isActive) values('Larry',true);
Query OK, 1 row affected (0.13 sec)

mysql> insert into MapKeys(Name,isActive) values('David',false);
Query OK, 1 row affected (0.16 sec)

mysql> insert into MapKeys(Name,isActive) values('Mike',true);
Query OK, 1 row affected (0.14 sec)

mysql> insert into MapKeys(Name,isActive) values('Carol',false);
Query OK, 1 row affected (0.17 sec)

mysql> insert into MapKeys(Name,isActive) values('Sam',false);
Query OK, 1 row affected (0.15 sec)

mysql> insert into MapKeys(Name,isActive) values('Bob',true);
Query OK, 1 row affected (0.19 sec)

Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select. Truy vấn như sau:

mysql> select *from MapKeys;

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

+----+-------+----------+
| Id | Name  | isActive |
+----+-------+----------+
|  1 | Larry |        1 |
|  2 | David |        0 |
|  3 | Mike  |        1 |
|  4 | Carol |        0 |
|  5 | Sam   |        0 |
|  6 | Bob   |        1 |
+----+-------+----------+
6 rows in set (0.00 sec)

Bây giờ chúng ta hãy ánh xạ chìa khóa bằng cách sử dụng câu lệnh trường hợp. Truy vấn như sau -

mysql> select Id,Name,
   -> (
   -> CASE WHEN isActive = 1 THEN 'ENABLED'
   -> ELSE 'DISABLED'
   -> END
   -> ) AS Status
   -> from MapKeys;

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

+----+-------+----------+
| Id | Name  | Status   |
+----+-------+----------+
|  1 | Larry | ENABLED  |
|  2 | David | DISABLED |
|  3 | Mike  | ENABLED  |
|  4 | Carol | DISABLED |
| 5  | Sam   | DISABLED |
| 6  | Bob   | ENABLED  |
+----+-------+----------+
6 rows in set (0.00 sec)

Bạn có thể đạt được điều tương tự với sự trợ giúp của hàm IF () -

mysql> select Id,Name,if(isActive,'ENABLED','DISABLED') as Status from MapKeys;

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

+----+-------+----------+
| Id | Name  | Status   |
+----+-------+----------+
|  1 | Larry | ENABLED  |
|  2 | David | DISABLED |
|  3 | Mike  | ENABLED  |
|  4 | Carol | DISABLED |
| 5  | Sam   | DISABLED |
| 6  | Bob   | ENABLED  |
+----+-------+----------+
6 rows in set (0.00 sec)