次のクエリで問題が発生しました。私はそれを最適化し、おそらく読みやすくしようとしています。3 つのテーブル orders_returned、orders_completed、orders_delivered があり、一致する列 oder_id、customer_id があるとします。選択したオプションによっては、配送されてから返され、最終的に完了した (3 つのテーブルすべてで同じ order_id が発生する) 同じ customer_id を持つ注文を取得する必要がある場合があります。また、配送された注文と返品された注文のみを取得する必要がある場合もあります。その場合は、 WHERE句AND order_id IN (SELECT order_id FROM ORDERS_COMPLETED)
から省略します。たとえば、ジョンとティム
の顧客から配達された注文と返品された注文を取得します。今のところ、私のクエリは次のようになります。
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 とその他の無関係な列を持つ Orders テーブルもあります。customer_ids は保存されません。また、順序は 1 つまたは 2 つのテーブルでのみ発生する可能性があるため、結合はここでは役に立たないと思います。