Если «,» в операторе UPDATE заменить на AND, что это значит в SQL?
Заявление об обычном обновлении:
UPDATE table
SET column1 = value ,
column2 = value
WHERE condition
Постановка моего вопроса:
UPDATE table
SET column1 = value AND column2 = value
WHERE condition
Затронутые строки кажутся разными, поэтому я хочу знать, что означает мой вопрос в SQL?
После вставки запроса (из оригинала): обновить тестовый набор столбец 1 = 2, столбец 2 = 5
После вставки запроса (из оригинала): обновить тестовый набор столбец 1 = 2 И столбец 2 = 5
если я вставлю запрос (из оригинала): Обновить тестовый набор столбец 1 = 2 И = 4
@Phil Как я могу узнать, какую СУБД я использую? Затронутые строки в обычном заявлении больше, чем мой вопрос.
В каком ПО вы выполняете запросы?
@Phil Я использую phpMyadmin, должен быть MySql?
Итак, ваша СУБД — mysql. Задавая вопросы о базах данных, не забудьте включить соответствующий тег
Почему бы не провести эксперимент?
Согласно документы, список назначений должен состоять только из col_name = value [, col_name = value ].... Все, о чем я могу думать, это то, что оно оценивается как логическое выражение, например, column1 = ( value AND column2 = value ), где column2 = value может быть сравнением. Если бы вы могли показать, чем отличаются результаты, я уверен, это помогло бы объяснить разницу.
@ Фил, я думаю, ты прав. он оценивается как логическое выражение....






Мы можем видеть из этого простого эксперимента...
https://www.db-fiddle.com/f/3KawkrD8QfjJu6YyfuzB7U/0
...это ...
UPDATE my_table SET c = 2 AND b = 1;
... интерпретируется как...
UPDATE my_table SET c ........ = 1;
Наверное, неправильно писать 2 AND b = 1, хотя одни базы оценивают это, а другие нет.
Если вы намерены установить несколько столбцов за один раз, вы ДОЛЖНЫ использовать запятую
Если вы используете эту конструкцию, возможно, некоторые базы данных будут обрабатывать ее в соответствии с побитовой логической операцией или они будут рассматривать любое ненулевое значение как истина/ложь и любой нуль как ложь/истина, а другие будут обрабатывать ее в соответствии с логической операцией.
В примере клубничка любезно разместила: https://www.db-fiddle.com/f/3KawkrD8QfjJu6YyfuzB7U/0
Установите базу данных в MySQL и запустите ее; это работает - MySQL, вероятно, обрабатывает 2 как истину, поэтому операция становится:
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 и снова запустите ее.
На этот раз вы получаете сообщение об ошибке, в котором И ожидает логических операндов, а целое число 2 недопустимо.
Следовательно, в Postgres это может быть приемлемо:
SET d = (c=1 AND b=2) --sets a true or false value for d
Ваша другая форма неприемлема
--
Короче говоря, вы, вероятно, намеревались установить несколько столбцов: используйте запятую.
У вас есть true и false, но вам также нужны false и true для полноты
Не похоже на ANSI SQL, так какую СУБД вы используете?