私は、大きなSQL式と複雑なクエリを生成するシステムを作成しています。 コードジェネレータを使ってコードを単純化し、少し読みやすくする(https://pastebin.com/UZJ01Q19)CTE(Withステートメント)はPostgreSQLで共通の下位式を排除できますか?
いくつかの場所では、任意の数の倍の複雑な部分式の結果を再利用し、ComplexQuery
はこの式で二回評価された場合の例
WITH ... AS <DoSetup>,
intermediate AS <ComplexQuery>
SELECT a, b FROM
(SELECT * FROM intermediate WHERE ...)
UNION
(SELECT * FROM intermediate WHERE ...)
ため、への道があり、中に私は、バインドされた式が評価された回数思っていました一度しか評価しないように表現を書き直す?私は一時的なビューを作成しましたが、それはすべてのアクセスでサブクエリを再評価するようです。
ありがとう、私の例は実際には単純化されています - 私はちょうどクエリを複数回再利用する簡単な方法を選びたがっています。しかし、それは私が頭に浮かべるものです。 – Xandros