3

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 でそれを記述する方法がわかりません。

4

2 に答える 2

5

(+) 演算子を使用します。

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(+);

http://docs.oracle.com/cd/B28359_01/server.111/b28286/queries006.htm

于 2012-10-17T16:32:46.633 に答える
0

「左外部結合」を使用できます。

            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
            LEFT OUTER JOIN pi
              ON users.user_id = pi.user_id
            LEFT OUTER JOIN pu
              ON users.user_id = pu.user_id
            LEFT OUTER JOIN re
              ON users.user_id = pi.user_id
            ;
于 2012-10-17T16:42:12.073 に答える