我需要完美的加入

时间:2017-11-09 16:05:21

标签: sql oracle date join

我有三个看起来像这样的表

表A

TIME_EFFECTIVE            DESCRIPTION    ID    DATAVAL
1998/01/11 12:00:00 AM    DescA          1     1
1998/01/11 12:00:00 AM    DescA          2     2
1998/01/11 12:00:00 AM    DescB          1     3
1998/01/11 11:00:00 AM    DescA          2     4

表B

HOUR                      DESCRIPTION    ID    OSO
1998/01/11 12:00:00 AM    DescA          1     10
1998/01/11 12:00:00 AM    DescA          2     34
1998/01/11 12:00:00 AM    DescB          1     12
1998/01/11 11:00:00 AM    DescA          2     40

表C

DESCRIPTION    CVAL    VVAL
DescA          12      1
DescB          34      2

我希望这个...在某个日期之后的所有TIME_EFFECTIVE ......

结果表

TIME_EFFECTIVE            DESCRIPTION    ID    DATAVAL   OSO   CVAL    VVAL
1998/01/11 12:00:00 AM    DescA          1     1         10    12      1
1998/01/11 12:00:00 AM    DescA          2     2         34    12      1
1998/01/11 12:00:00 AM    DescB          1     3         12    34      2
1998/01/11 11:00:00 AM    DescA          2     4         40    12      1

每TIME_EFFECTIVE,DESCRIPTION和ID一条记录。没有重复这三个字段的重复。

什么是我完美的ORACLE SQL连接函数???

PS 我的结果表应该没有比表A更多的行。

3 个答案:

答案 0 :(得分:3)

你应该使用一些JOIN

  select a.TIME_EFFECTIVE, a.DESCRIPTION, a.ID, a.DATAVAL, b.OSO, c.CVAL, c.VVAL
  from table_a a 
  inner join table_b b on a.TIME_EFFECTIVE = b.HOUR 
        and a.DESCRIPTION = b.DESCRIPTION 
            and a.ID = b.ID
  inner join  table_c on c.DESCRIPTION = a.DESCRIPTION

答案 1 :(得分:3)

您是否尝试过INNER JOIN

另外,查看结果表,它似乎不匹配。 VVAL DescB不应该1GenericRecord<Furniture> furnObj[10][3]; 吗?如果没有,那么就会缺少一些步骤......

答案 2 :(得分:3)

表C中的VVAL存在一个小问题,行('DescB', 34, 1)您的输出请求2,但在表中它是1.如果这是2,您将获得所需的输出。

SELECT A.*
      ,B.OSO
      ,C.CVAL
      ,C.VVAL
  FROM A INNER JOIN B ON A.TIME_EFFECTIVE = B.HOUR AND A.DESCRIPTION = B.DESCRIPTION AND A.ID = B.ID
            INNER JOIN C ON A.DESCRIPTION = C.DESCRIPTION

提供输出:

TIME_EFFECTIVE          DESCRIPTION ID          DATAVAL     OSO         CVAL        VVAL
----------------------- ----------- ----------- ----------- ----------- ----------- -----------
1998-01-11 00:00:00.000 DescA       1           1           10          12          1
1998-01-11 00:00:00.000 DescA       2           2           34          12          1
1998-01-11 00:00:00.000 DescB       1           3           12          34          2
1998-01-11 11:00:00.000 DescA       2           4           40          12          1