sql—如何从数组中选取值并返回,而不是mysql中的大小写?

zf9nrax1  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(290)

我有一个mysql查询,我用case替换列名。

SELECT *,
  (CASE
      WHEN cp.client_type = 1 THEN 'AB'
      WHEN cp.client_type = 2 THEN 'BX'
      WHEN cp.client_type = 3 THEN 'PC'
      WHEN cp.client_type = 4 THEN 'DD'
      WHEN cp.client_type = 5 THEN 'DE'
  END) AS client_type 
  FROM clients as cp

问题是有20个这样的情况,我不想用20当条件查询。
有什么办法我可以用

SELECT *,
choose_from(Array("AB","BX","PC","DD","DE"), cp.client_type) as client_type from 
clients as cp
zqdjd7g9

zqdjd7g91#

正确的解决办法是 clientTypes 表和使用 JOIN :

SELECT cp.*, cp.client_type_name
FROM clients cp LEFT JOIN
     client_types ct
     ON cp.client_type = ct.client_type;

如果你没有,创造一个!

create table client_types (
    client_type_id int primary key,
    client_type_name varchar(255)
);

insert into client_types (client_type_id, client_type_name)
    values (1, 'AB'), (2, 'BX'), . . . ;

如果您出于某种原因对此有反感,可以使用 elt() 功能:

SELECT cp.*,
       ELT(client_type, 'AB', 'BX', 'PC', 'DD', 'DE') as client_type 
FROM clients cp;

不过,我强烈警告您不要这样做,因为一个小的输入错误可能会真正弄乱您得到的值,并且很难调试。

相关问题