Как использовать выберите 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
Другие вопросы по тегам