我可以编写不重复子查询的SQL查询吗?

时间:2020-04-09 14:38:56

标签: sql postgresql

我有疑问:

SELECT
  acc.usage AND EXISTS (
      SELECT * FROM order_bt prev_order
      WHERE sys_period @> sys_time() AND
        prev_order.id = o.id  AND prev_order.app_period && acc.usage_range
  ) as usage,
  acc.usage_range,
  acc.invoice,
  acc.invoice_range,
  o.*
FROM "order" o
left join period prd on prd.id = period_id
LEFT JOIN accounting_ready() acc ON TRUE
WHERE
  ( acc.usage AND EXISTS (
      SELECT * FROM order_bt prev_order
      WHERE sys_period @> sys_time() AND
        prev_order.id = o.id  AND prev_order.app_period && acc.usage_range
    ) OR acc.invoice )

在此查询中,下一部分是复制/粘贴:

  acc.usage AND EXISTS (
      SELECT * FROM order_bt prev_order
      WHERE sys_period @> sys_time() AND
        prev_order.id = o.id  AND prev_order.app_period && acc.usage_range
  ) as usage,

是否可以在没有此复制/粘贴的情况下编写查询?

1 个答案:

答案 0 :(得分:1)

您可以将查询放入派生表中:

SELECT *
FROM (
  SELECT acc.usage AND EXISTS (
              SELECT * FROM order_bt prev_order
              WHERE sys_period @> sys_time() AND
                prev_order.id = o.id  AND prev_order.app_period && acc.usage_range
          ) as usage,
          acc.usage_range,
          acc.invoice,
          acc.invoice_range,
          o.*
  FROM "order" o
  left join period prd on prd.id = period_id
  LEFT JOIN accounting_ready() acc ON TRUE
) t 
WHERE usage OR acc.invoice 
相关问题