У меня есть большое количество изменений, которые нужно внести в базу данных.
Записи, о которых идет речь, имеют статус столбца, который мне нужно обновлять, только если определенные статусы не записываются.
select 'status','source_id' from vicidial_list where list_id = "444662" and source_id = "3791775X"
возвращается
status,source_id
ADC,3791775X
АЦП - это статус, который следует игнорировать во время моего обновления
если я забегу
update 'db'.'vicidial_list' set 'status'='SUPR' where list_id = "444662" and source_id = "3791775X" and 'status' != "ADC"
это работает, значение статуса не обновляется. Однако у меня есть несколько статусов, которые мне нужно игнорировать, и поэтому мне нужно запустить
update 'db'.'vicidial_list' set 'status'='SUPR' where list_id = "444662" and source_id = "3791775X" and 'status' != "ASUPP" OR 'status' != "ADC"
После этого есть несколько инструкций OR. Однако, если я это выполнил, а затем запустите мой предыдущий оператор select
status,source_id
SUPR,3791775X
Поле обновилось, хотя мой оператор OR должен предотвратить это?
Мне явно не хватает чего-то, как я могу добавить несколько операторов OR в этот оператор?
Вместо OR
вы хотите использовать AND
. Например, если статус 'ASUPP'
, это не 'ADC'
. То, что соответствие и строка обновляются.
Другая возможность - использовать:
status NOT IN ('ASUPP',
'ADC')
Замечание: лучше использовать одинарные кавычки для включения строк, чтобы быть совместимыми со стандартной и другой СУБД.
Возможно, вам потребуется использовать AND
вместо OR
update 'db'.'vicidial_list' set 'status'='SUPR'
where list_id = "444662" and source_id = "3791775X"
and 'status' != "ASUPP" and 'status' != "ADC"