Oracle 8i で 4 つのテーブルを結合したいと考えています。4 つのテーブル名は、users、picks、putaways、および relocates です。4 つのテーブルのそれぞれに user_id フィールドがあります。ピッキング、保管、および再配置は次のようになります。
| USER_ID | PICKS | PICK_VOLUME |
+---------+-------+-------------+
| SMITH12 | 234 | 2431.12 |
putaways テーブルと relocates テーブルは、'PICKS' と 'PICK_VOLUME' がそれぞれ putaways と relocates に置き換えられていることを除いて、同じように見えます。
左結合を実行したいテーブルは users テーブルです。これは、在庫を選択しただけで再配置しなかったか、それを片付けたかに関係なく、すべての user_id が含まれるためです。言い換えれば、一部のユーザーがピッキング、保管、および再配置、またはそれらの組み合わせではなく、再配置のみを持っている場合でも、すべてのレコードを表示したいと考えています。
ユーザーテーブルは次のようになります。
| USER_ID | SHIFT | GROUP_ID |
+---------+-------+------------+
| SMITH12 | NIGHT | STOCK_KEEP |
したがって、理想的には、これら 3 つの列を結果セットの左側に配置し、picks、putaways、および relocates テーブルを右側に結合したいと考えています。最終的な選択結果は次のようになります。
| USER_ID | SHIFT | GROUP_ID | PICKS | PICK_VOL | RELOCATES | RELOCATE_VOL | PUTAWAYS | PUTAWAY_VOL |
+---------+-------+------------+-------+----------+-----------+--------------+----------+-------------+
| SMITH12 | NIGHT | STOCK_KEEP | 234 | 2431.12 | NULL | NULL | 4 | 76.52 |
私はこのSQLクエリを試しました:
select users.user_id, users.group_id, users.shift, pi."Picks", pi."Pick Volume", pu."Putaways", pu."Putaway Volume", re."Relocates", re."Relocate Volume"
from users, pi, pu, re
where users.user_id = pi.user_id
and users.user_id = pu.user_id
and users.user_id = re.user_id;
ただし、ユーザーが picks、relocates、および putaways テーブルに少なくとも 1 つのトランザクションを持つ行のみを返します。私はバニラの結合を行っているので、これは予想されます。ある種の左結合が必要だと思いますが、Oracle 8i でそれを記述する方法がわかりません。