3

我想加入 Oracle 8i 中的四个表。这四个表名是 users、picks、putaways 和 relocates。四个表中的每一个都有一个 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 |

因此,理想情况下,我希望将这三列放在结果集的左侧,将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;

但它只返回用户在pick、relocates 和putaways 表中至少有一个事务的行。这是意料之中的,因为我正在做一个香草加入。我假设我需要某种左连接,但我不确定如何在 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 回答