我有疑问:
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,
是否可以在没有此复制/粘贴的情况下编写查询?
答案 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