首页 > 解决方案 > SQL中“UPDATE table SET column1 = value AND column2 value WHERE条件”是什么意思?

问题描述

如果将语句中的“,”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

输出

标签: mysqlsql

解决方案


2 AND b = 1尽管有些数据库会评估它而其他数据库不会,但编写它可能是错误的

如果您打算一次性设置多个列,则必须使用逗号

如果你使用这个结构,也许有些数据库会根据位逻辑运算处理它,或者它们会将任何非零值视为真/假,将任何零值视为假/真,而其他数据库将根据布尔逻辑运算处理它

在示例草莓中友好地发布: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

不接受您的其他表格

--

长话短说,您可能打算设置多个列:使用逗号。


推荐阅读