【问题标题】:I need the perfect join [closed]我需要完美的加入[关闭]
【发布时间】:2017-11-09 16:05:21
【问题描述】:

我有三个这样的表

表 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 join函数???

附言 结果表的行数不应超过表 A。

【问题讨论】:

  • 提示:FULL OUTER JOIN.

标签: sql oracle date join


【解决方案1】:

你应该使用一些 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

【讨论】:

    【解决方案2】:

    你试过INNER JOIN吗?

    另外,查看您的结果表,它似乎不匹配。 VVAL for DescB 不应该是 1 吗?如果没有,那么缺少一些步骤......

    【讨论】:

      【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-10
        • 2018-12-29
        • 1970-01-01
        • 2018-02-23
        • 2012-12-11
        相关资源
        最近更新 更多