Обновление значения из возвращенных строк из оператора SELECT

0

Используя одну таблицу USERS, я хотел бы обновить 20 верхних значений (на основе столбцов marks) столбца STATUS который в настоящее время равен NULL для "Ожидание".

Возможно ли это с помощью Update (только для того, чтобы повлиять на 20 лучших пользователей, а остальное - на "N/A")?

Прямо сейчас я могу только думать о

Update
  STATUS
from
  USERS
where
  STATUS is NULL
group by
  MARKS desc
LIMIT
  20;

Но я получаю сообщение об ошибке

РЕДАКТИРОВАТЬ:-

UPDATE  
  student  
SET  
  status = 'Waiting'  
where  
  branch in (  
    select  
      branch  
    from  
      (  
        select  
          branch  
        from  
          student  
        where  
          STATUS is NULL  
        order by  
          CGPA DESC  
        limit  
          1, 2  
      ) temp  
  )  

Я пробовал это, но он обновляет все строки не только из двух, которые я хочу (верхние 2, отсортированные по меткам)

  • 0
    Пожалуйста, дайте структуру таблицы, особенно детали поля первичного ключа. Это поможет в формулировании запроса
  • 0
    что сообщается об ошибке?
Показать ещё 4 комментария
Теги:

2 ответа

0

http://sqlfiddle.com/#!9/a850e/1

UPDATE users u
JOIN (
  SELECT id 
  FROM users
  WHERE 'status' IS NULL
  ORDER BY marks desc
  LIMIT 20
) j 
ON u.id = j.id
SET 'status'='WAITING';
0

Попробуй это.

UPDATE USERS SET status = 'Waiting' where ID in (select ID from USERS where STATUS is NULL order by MARKS DESC limit 1,20)
  • 0
    Это говорит о том, что эта версия MySQL не допускает ограничения внутри таких утверждений. Я отредактировал свой пост тем, что сработало, но дает неверные результаты
  • 0
    Вы не можете использовать LIMIT в подзапросе IN, но вы можете использовать в производной таблице, например, UPDATE t1 JOIN (ВЫБЕРИТЕ foo ОТ t2 LIMIT 20) dt ON t1.id = dt.id SET t1.bar = 'bat' ;
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню