SQL - обновить все строки с определенным условием - PullRequest
0 голосов
/ 27 апреля 2018

Привет, я хочу сделать это запрос, который делает следующее:

Если я выполню запрос, все строки будут установлены в 0, кроме определенного идентификатора в где (который должен быть всегда 1, и только одна строка может быть активной в данный момент)

tbl_menu
id | серийный
стартер | VARCHAR
тарелка | VARCHAR
напиток | VARCHAR
статус | smallint

Так, если у меня есть один реестр со статусом в 1 и всем остальным в 0, когда я выполняю этот запрос, определенный идентификатор, который я выбираю, изменится на 1, а другие на 0
также только один статус строки = 1

Ответы [ 4 ]

0 голосов
/ 27 апреля 2018

Я думаю, у вас есть два варианта дизайна. 1) Сделайте это с помощью двух простых запросов. 2) Напишите еще один сложный запрос с помощью оператора case.

Лично мне нравится легко:

UPDATE tblmenu SET status = 0 WHERE status = 1;
UPDATE tblmenu SET status = 1 WHERE id = n;

Хотя, сказав это, я думаю, что лучший подход - это ...

  • Избавьтесь от своего столбца статуса
  • Создайте новую таблицу под названием, скажем, tblstatus с идентификатором из одного столбца
  • Одна запись с идентификатором записи
  • Внешний ключ вашей основной таблицы

Теперь все, что вам нужно сделать, это:

UPDATE tblstatus SET id = n;

Быстрее, проще, надежнее ...

0 голосов
/ 27 апреля 2018

Это не решает проблему обновления , но решает проблему принудительного (не более) одной активной строки. Используйте частичный уникальный индекс:

create unique index unq_menu_active on tblmenu(flag) where flag = 1;
0 голосов
/ 27 апреля 2018

Попробуйте это:

UPDATE tbl_menu
set status = CASE WHEN id = 4 or status = 1 THEN 1 ELSE 0 END;
0 голосов
/ 27 апреля 2018

Это базовое заявление об обновлении. Но если бы вы могли дать больше информации об именах столбцов и о том, при каких условиях вы хотите выполнять обновления, это было бы полезно.

UPDATE tbl_menu SET (column) = value  
WHERE (condition)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...