programing

정수 필드를 텍스트로 바꿀 대소문자가 있는 MySQL SELECT

codeshow 2023. 8. 20. 12:57
반응형

정수 필드를 텍스트로 바꿀 대소문자가 있는 MySQL SELECT

안녕하세요. 정수 필드를 각 텍스트로 대체해야 합니다. 가변적인 것이 아닙니다. 조인을 사용하는 것은 낭비입니다.

테이블 구조는

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

그러나 전체 사례 진술을 제거하면 쿼리는 거의 계획대로 작동합니다(조인은 괜찮습니다).

사건 진술이 제대로 이루어지지 않은 것 같습니다.올바른 형식은 일반적으로 x = 1이면 'y'이고 x = 2이면 'z'이고 그렇지 않으면 NULL END입니다.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

언급URL : https://stackoverflow.com/questions/60039462/mysql-select-with-case-to-replace-integer-field-with-text

반응형