为什么 sql 生成器在 where 子句中使用双括号?

Why are sql generators using double parenthesis in where clause?

我使用了不同类型的自动生成的 sql 语句,例如 MS Access 和 Firebird sql。当我使用一些查询生成器生成此 sql 片段(Access 或 IBExpert)时,它们通常会生成比需要更多的括号。

我不考虑围绕某些布尔运算添加额外的括号,但以下面的例子为例:

select id, name from table as t
where ((t.id = @id))

当我删除它们时,查询工作得很好。但为什么它们会如此频繁地生成?

在这种情况下,查询是否有括号没有区别。

我以前见过这样的事情:解析器只是把它们扔进去,因为它没有坏处,而且使解析代码更简单。在 AST 中渲染节点时,将其括在方括号中 - 简单。

否则您可能需要回溯才能正确地括起 OR 条件,例如:

WHERE ((A OR B) AND (C OR D)) // correct

对比

WHERE A OR B AND C OR D // incorrect