四表加入Oracle 8i

时间:2012-10-17 16:30:35

标签: sql oracle join

我想在Oracle 8i中加入四个表。四个表名称是用户,选择,放置和重定位。四个表中的每一个都有一个user_id字段。挑选,放置和重新安置看起来像这样:

| USER_ID | PICKS | PICK_VOLUME |
+---------+-------+-------------+

| SMITH12 | 234   | 2431.12     |

除了'PICKS'和'PICK_VOLUME'分别被替换为putaways和relocates之外,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;

但它只返回用户在picks,relocates和putaways表中至少有一个事务的行。这是预期的,因为我正在做一个香草加入。我假设我需要某种左连接,但我不确定如何在Oracle 8i中编写它。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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
            ;