В чем смысл «UPDATE table SET column1 = value AND column2 value WHERE условие» в SQL?

Если «,» в операторе 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

выход

Не похоже на ANSI SQL, так какую СУБД вы используете?

Phil 29.05.2019 05:59
«Затронутые строки кажутся разными» ? чем отличаются точно?
Phil 29.05.2019 06:02

@Phil Как я могу узнать, какую СУБД я использую? Затронутые строки в обычном заявлении больше, чем мой вопрос.

king theking 29.05.2019 06:12

В каком ПО вы выполняете запросы?

Phil 29.05.2019 06:15

@Phil Я использую phpMyadmin, должен быть MySql?

king theking 29.05.2019 06:22

Итак, ваша СУБД — mysql. Задавая вопросы о базах данных, не забудьте включить соответствующий тег

Phil 29.05.2019 06:25

Почему бы не провести эксперимент?

Strawberry 29.05.2019 06:31

Согласно документы, список назначений должен состоять только из col_name = value [, col_name = value ].... Все, о чем я могу думать, это то, что оно оценивается как логическое выражение, например, column1 = ( value AND column2 = value ), где column2 = value может быть сравнением. Если бы вы могли показать, чем отличаются результаты, я уверен, это помогло бы объяснить разницу.

Phil 29.05.2019 06:31

@ Фил, я думаю, ты прав. он оценивается как логическое выражение....

king theking 29.05.2019 06:57
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
9
150
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Мы можем видеть из этого простого эксперимента...

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 для полноты

Strawberry 29.05.2019 08:13

Другие вопросы по теме