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

时间:2016-02-16 07:49:48

标签: sql ms-access ibexpert

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

我不考虑围绕某些布尔操作的额外括号,但请举例说明以下内容:

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

当我删除它们时,查询工作完全正常。但为什么它们经常被生成?

1 个答案:

答案 0 :(得分:3)

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

我之前见过这样的事情:解析器只是抛出它们,因为它没有任何害处,但使解析代码更简单。在AST中渲染节点时,将其用括号括起来 - 简单。

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

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

vs

WHERE A OR B AND C OR D // incorrect