1

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

我不考虑一些布尔运算周围的额外括号,但以以下为例:

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

当我删除它们时,查询工作得很好。但是为什么它们会经常生成呢?

4

1 回答 1

3

在这种情况下,带有或不带有括号的查询没有区别。

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

否则,您可能必须回溯以正确括号OR条件,例如:

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

对比

WHERE A OR B AND C OR D // incorrect
于 2016-02-16T08:01:37.420 回答