Что означает «таблица UPDATE SET column1 = значение И значение столбца WHERE» в SQL? - PullRequest
1 голос
/ 29 мая 2019

Если "," в операторе UPDATE заменено на AND, что означает в SQL?

Нормальное обновление:

UPDATE table 
SET column1 = value , 
    column2 = value 
WHERE condition

Мой вопрос:

UPDATE table 
SET column1 = value AND column2 = value 
WHERE condition

Похоже, что затронутые строки различны, поэтому я хочу знать, что означает мое утверждение вопроса в SQL?

Исходные данные теста

После вставки запроса (из оригинала): Обновить набор тестов column1 = 2, column2 = 5

Нормальное обновление

После вставки запроса (из оригинала): Обновить набор тестированияcolumn1 = 2 AND column2 = 5

Мой вопросник

, если я вставлю запрос (из оригинала): Обновить набор тестирования column1 = 2 AND = 4

выход

Ответы [ 2 ]

3 голосов
/ 29 мая 2019

Возможно, неправильно писать 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

Ваша другая форма неприемлема

-

Короче говоря, вы, вероятно, намеревались установить несколько столбцов: используйте запятую.

1 голос
/ 29 мая 2019

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

https://www.db -fiddle.com / ж / 3KawkrD8QfjJu6YyfuzB7U / 0

... это ...

UPDATE my_table SET c = 2 AND b = 1;

... интерпретируется как ...

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