Как использовать выберите Case в следующем запросе SQL
У меня две таблицы users
а также userdetail
, Я пытаюсь создать представление, в котором, если статус userdetail
столбец 1 должен показывать Active
в поле зрения и заблокирован, если статус 0:
CREATE VIEW `new` AS
SELECT
users.id AS id,
userdetail.healthissues AS healthissues,
users.fullName AS fullname,
userdetail.`status`,
CASE status
WHEN userdetail.status ='1' THEN userdetail.`status`= 'Blocked'
WHEN userdetail.status= '0' THEN userdetail.`status` ='Active'
END ,
users.phoneNumber AS number
FROM users
JOIN userdetail ON users.id = userdetail.reference
Этот код не дает желаемого результата. Кто-нибудь может помочь мне с этим?
2 ответа
Решение
Я думаю, что это правильный синтаксис для того, что вы хотите:
CREATE VIEW `new` AS
SELECT u.id AS id, ud.healthissues AS healthissues, u.fullName,
ud.status as orig_status,
(CASE WHEN ud.status = 1 THEN 'Blocked'
WHEN ud.status = 0 THEN 'Active'
END) as status,
u.phoneNumber AS number
FROM users u JOIN
userdetail ud
ON u.id = ud.reference;
Заметки:
- Я не уверен, если вы хотите выбрать статус, а также строку, но у вас есть это в вашем запросе.
- Правильный синтаксис для
case
не использует=
тогдаthen
пункты (ну, если вы не хотите, чтобы он возвращал логическое значение). - Псевдонимы таблиц облегчают написание и чтение запроса.
New
это плохое имя для представления. Хотя это и не зарезервировано, это ключевое слово.
Вы не можете присвоить значение.. просто выберите
CREATE VIEW `new` AS
SELECT
users.id AS id,
userdetail.healthissues AS healthissues,
users.fullName AS fullname,
userdetail.`status`,
CASE status
WHEN userdetail.status ='1' THEN 'Blocked'
WHEN userdetail.status= '0' THEN 'Active'
END as my_eval_status,
users.phoneNumber AS number
FROM users
JOIN userdetail ON users.id = userdetail.reference