我在使用以下查询时遇到了困难。我一直在尝试优化它,也许让它更具可读性。假设我有 3 个表 orders_returned、orders_completed、orders_delivered 以及匹配列 oder_id、customer_id。根据选择的选项,我可能需要检索已交付、然后返回并最终完成的订单(所有三个表中出现相同的 order_id),这些订单具有相同的 customer_id。此外,我可能只需要检索已交付和退回的订单,在这种情况下,我会AND order_id IN (SELECT order_id FROM ORDERS_COMPLETED)
从WHERE子句中省略。例如,获取客户 John 和 Tim 交付和退回的订单
到目前为止,我的查询如下所示:
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 数据库。还有一个 Orders 表,它有不同的 order_ids 和一些其他不相关的列。它不存储 customer_ids。此外,订单可能出现在一个表中,也可能只出现在其中两个表中,所以我认为连接在这里没有用。