【发布时间】:2014-05-10 22:21:42
【问题描述】:
在数学和许多编程语言(我认为标准 SQL 也是如此)中,括号 change precedence(将首先评估的部分分组)或增强可读性(对于人眼)。
等效示例:
SELECT array[1,2] @> array[1]
SELECT (array[1,2]) @> array[1]
SELECT array[1,2] @> (array[1])
SELECT ((array[1,2]) @> (array[1]))
但是SELECT 1 = ANY array[1,2] 是一个语法错误(!),SELECT 1 = ANY (array[1,2]) 是有效的。为什么?
好的,因为"the manual says so"。但是人类记住所有异常的逻辑是什么?
有相关指南吗?
我不明白为什么在某些情况下(expression) 与expression 相同,但在其他情况下却不同。
PS1:括号也用作值列表分隔符,如expression IN (value [, ...])。但是数组不是值列表,当(array expression) 与array expression 不一样时,PostgreSQL 中似乎没有一般规则。
另外,我以数组为例,但这个问题/问题不仅仅是关于数组。
【问题讨论】:
-
既然这是 SQL,算你自己幸运,因为你不必把它写成模拟英语短语,比如
SELECT 1 HAS ANY VALUE FROM ARRAY WITH VALUES 1 AND 2 AND 3 END;)
标签: sql postgresql syntax semantics any