【问题标题】:Why are sql generators using double parenthesis in where clause?为什么 sql 生成器在 where 子句中使用双括号?
【发布时间】:2016-02-16 07:49:47
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: sql ms-access ibexpert


    【解决方案1】:

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

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

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

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

    对比

    WHERE A OR B AND C OR D // incorrect
    

    【讨论】:

    • 奇怪的是,在我给定的情况下是两对,而添加一对就足够了。但有时,如此简单的事情背后,却隐藏着一些更复杂的含义。所以我开始考虑他们的需要。
    • 有两个括号可能是因为AST的根节点也有括号!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 2014-02-07
    • 2013-11-24
    • 1970-01-01
    • 2017-01-01
    • 2012-09-09
    相关资源
    最近更新 更多