为什么 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
我使用了不同类型的自动生成的 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