Пометка строки как «используемой» с помощью UPDATE - PullRequest
0 голосов
/ 23 октября 2018

Я хочу посмотреть с запросом SQL UPDATE, был ли уже использован идентификатор.В ответе также следует различать недействительный идентификатор и уже использованный идентификатор.

Мой подход на примере:
Хранение избирателей в базе данных SQL.Таблица вызовов Voters со столбцами vote_id (уникально), voted (0 или 1) и already_voted (0 или 1):

  • Голосующий x голосует за первоговремя и имеет действительный vote_id: проверка voted.
  • x приходит во второй раз: отклонение путем проверки already_voted.
  • x приходит в третий раз:voted и already_voted оба проверены.Нет обновлений.Но я хочу «не обновлять» сценарий, когда vote_id недействителен.
  • y не имеет действительного vote_id: нет обновления.

У меня нетпонять, почему voted возвращается к 0, когда already_voted изменяется с 0 на 1:

UPDATE Voters        
SET     already_voted = CASE WHEN voted = 1 THEN 1 END,
        voted = CASE WHEN voted = 0 THEN 1 END
WHERE vote_id='12345'

Я также открыт для совершенно другого подхода.Спасибо за ваше время.

1 Ответ

0 голосов
/ 23 октября 2018

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

UPDATE Voters        
SET     already_voted = CASE WHEN voted = 1 THEN 1 ELSE already_voted END,
        voted = CASE WHEN voted = 0 THEN 1 ELSE voted END
WHERE vote_id='12345

Когда проголосовало уже 1, и вы используете свой запрос, используется значение по умолчанию для выражения case (для столбца с голосованием), которое равно NULL, если не указано иное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...