У меня есть запрос 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 => «AB», 2 => «BX»






Правильное решение - иметь таблицу 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;
Однако я настоятельно предостерегаю от этого, потому что небольшая опечатка может действительно испортить получаемые вами значения - и ее будет сложно отладить.
Думаю, таблицы client_type нет!
Да, и Гордон говорит о том, что должен должен быть
Последовательны ли ваши типы? Ваши коды всегда состоят из двух букв?