Возможно, неправильно писать 2 AND b = 1
, хотя некоторые базы данных оценивают его, а другие нет
Если вы хотите установить несколько столбцов за один раз, вы ДОЛЖНЫ использовать запятую
Если вы используете эту конструкцию, возможно, некоторые базы данных будут обрабатывать ее в соответствии с побитово-логической операцией, или они будут обрабатывать любое ненулевое значение как true / false, а любой ноль - как false / true, а другие будут обрабатывать его в соответствии с логической операцией
В примере клубники любезно отправлено: https://www.db -fiddle.com / f / 3KawkrD8QfjJu6YyfuzB7U / 0
Установите базу данных MySQL и запустите ее;это работает - MySQL, вероятно, рассматривает 2 как true, поэтому операция становится такой:
SET c = true and true --when b = 1
SET c = true and false --when b=0
Вы можете видеть, что ваш столбец c установлен в 1 или 0 в зависимости от истинности
SET c = (2 AND (b = 1))
^^^^^^^^^^^^^^^
This whole thing is turned into a value.
for C, it does NOT set column B at all
Теперь измените базу данных на Postgres и запустите ее снова
На этот раз вы получите ошибку, которая ожидает логические операнды AND, а целое число 2 недопустимо
Следовательно, в Postgres, хотя это может быть приемлемо:
SET d = (c=1 AND b=2) --sets a true or false value for d
Ваша другая форма неприемлема
-
Короче говоря, вы, вероятно, намеревались установить несколько столбцов: используйте запятую.