MySQL SELECT с регистром для замены целочисленного поля текстом - PullRequest
0 голосов
/ 03 февраля 2020

Привет, мне нужно заменить целочисленное поле соответствующим текстом, это не переменная вещь, использование объединения было бы пустой тратой.

Структура таблицы

CREATE TABLE `mesas_cab` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cid` int(11) DEFAULT NULL,
  `vid` int(11) DEFAULT NULL,
  `status` int(11) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

и мой запрос

SELECT
mesas_cab.id,
mesas_cab.cid,
mesas_cab.vid,
mesas_cab.status,
usuarios.NOME,
clientes.RAZAOSOCIAL,
CASE mesas_cab.status
    WHEN 0 THEN 'Livre'
    WHEN 1 THEN 'Ocupada'
    WHEN 2 THEN 'Fechada'
END CASE as status_str
FROM
mesas_cab
LEFT JOIN usuarios ON mesas_cab.vid = usuarios.CODIGO
LEFT JOIN clientes ON mesas_cab.cid = clientes.CODIGO

я видел этот ответ заменить целое число на строку в запросе

, но мой запрос все еще дает мне синтаксические ошибки

[SQL] SELECT
mesas_cab.id,
mesas_cab.cid,
mesas_cab.vid,
mesas_cab.status,
usuarios.NOME,
clientes.RAZAOSOCIAL,
CASE mesas_cab.status
    WHEN 0 THEN 'Livre'
    WHEN 1 THEN 'Ocupada'
    WHEN 2 THEN 'Fechada'
END CASE as status_str
FROM
mesas_cab
LEFT JOIN usuarios ON mesas_cab.vid = usuarios.CODIGO
LEFT JOIN clientes ON mesas_cab.cid = clientes.CODIGO

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'CASE as status_str
FROM
mesas_cab
LEFT JOIN usuarios ON mesas_cab.vid = usuar' at line 12

но когда я удаляю весь оператор case, запрос работает почти так, как планировалось (с соединениями все в порядке)

1 Ответ

0 голосов
/ 03 февраля 2020

Кажется, что утверждение case сделано неправильно. Правильный формат обычно CASE, когда x = 1, затем «y», когда x = 2, затем «z», иначе еще NULL END AS column_name

Так что в нашем случае это должно быть что-то вроде


SELECT
mesas_cab.id,
mesas_cab.cid,
mesas_cab.vid,
mesas_cab.status,
usuarios.NOME,
clientes.RAZAOSOCIAL,
CASE 
    WHEN mesas_cab.status = 0 THEN 'Livre'
    WHEN mesas_cab.status = 1 THEN 'Ocupada'
    WHEN mesas_cab.status = 2 THEN 'Fechada'
    ELSE NULL
END as status_str
FROM
mesas_cab
LEFT JOIN usuarios ON mesas_cab.vid = usuarios.CODIGO
LEFT JOIN clientes ON mesas_cab.cid = clientes.CODIGO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...