UPDATE backend."orders"
SET "statusId" = 5
WHERE "orderId" IN (10697457,10697458)
and "statusId" IN (0,1,2,3,4);
UPDATE backend."orders"
SET "statusId" = 5
WHERE "orderId" IN (VALUES (10697457),(10697458))
and "statusId" IN (VALUES (0),(1),(2),(3),(4));
这两个查询之间有什么区别?
答案 0 :(得分:1)
这两个查询给出了相同的结果。不同之处在于可读性和效率。
如the doc中所述,IN运算符必须后跟:
带括号的标量表达式列表。如果是,结果是“真实的” 左手表达式的结果等于任何右手 表达式
通过使用关键字VALUES,您仍然可以创建一个标量表达式列表,因此它是正确的,但它更重,the documentation (see the end of the page)不推荐它:
提示:对于简单的IN测试,最好依赖于标量列表 IN的形式比写如上所示的VALUES查询。清单 标量方法需要较少的写作,并且通常更有效。
它可能会对性能产生影响(如引言所示),因为在有和没有VALUES的情况下,标量列表的创建可能会有所不同,但我不知道,有人必须确认。
答案 1 :(得分:0)
两个版本都是正确的,但依赖于IN的标量列表形式比编写VALUES查询更好。 IN方法的标量列表需要较少的写入,并且通常更有效。