1

MS Access や Firebird sql など、さまざまな種類の自動生成された 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 に答える