我一直遇到以下问题。我一直在试图优化它,或许使它更具可读性。假设我有3个表orders_returned,orders_completed,orders_delivered与匹配列oder_id,customer_id。根据选定的选项,我可能需要检索已交付的订单,然后返回并最终完成(具有相同customer_id的所有三个表中相同的order_id)。此外,我可能只需要检索只发货和退货的订单,在这种情况下,我将省略AND order_id IN (SELECT order_id FROM ORDERS_COMPLETED)
从WHERE条款。例如,获取传递和返回客户约翰和蒂姆· 订单截至目前我的查询看起来是这样的:我如何优化这个动态SQL查询?
SELECT order_id
FROM
(
SELECT order_id, customer_id
FROM ORDERS_RETURNED
UNION
SELECT order_id, customer_id
FROM ORDERS_COMPLETED
UNION
SELECT order_id, customer_id
FROM ORDERS_DELIVERED
)
WHERE
customer_id IN ('customer1', 'customer2', ...)
AND order_id IN (SELECT order_id FROM ORDERS_RETURNED)
AND order_id IN (SELECT order_id FROM ORDERS_COMPLETED)
AND order_id IN (SELECT order_id FROM ORDERS_DELIVERED)
我还在学习SQL,想看看有没有更好的选择。
编辑:我正在使用Oracle数据库。还有订单表有不同的order_ids和一些其他不相关的列。它不存储customer_ids。 此外,订单可能发生在一张表中或两张中,所以我认为这些连接在这里没有用处。
您使用的是什么RDBMS? – sgeddes
您是否没有存储所有DISTINCT订单的订单表? – sgeddes
我正在使用Oracle。是的,有订单表与不同的order_id's。 –