Могу ли я написать SQL запрос без дубликата подзапроса? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть запрос:

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 Ответ

1 голос
/ 09 апреля 2020

Вы можете поместить свой запрос в производную таблицу:

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...