Как выбрать значения из массива и вернуть вместо регистра в MySQL? - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть запрос 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

1 Ответ

0 голосов
/ 15 декабря 2018

Правильное решение - иметь таблицу 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;

Я настоятельно предупреждаю об этом, хотя, потому что небольшая опечатка может действительно испортить значения, которые вы получаете -- и будет трудно отлаживать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...