【问题标题】:Oracle query result is not giving the resultOracle 查询结果未给出结果
【发布时间】:2017-01-17 07:30:58
【问题描述】:

我有以下两张表

表A

     Name Location Group Value
     July   AAA    A    1
     Aug    BBB    B    2
     Sep    CCC    C    3
     Oct    DDD    D    4
     Nov    EEE    E    5

表 AA

 Name Location Group Value1
     July   AAA    A    6
     Aug    BBB    B    7
     Jan    CCC    C    8
     Oct    DDD    D    9
     Nov    FFF    F    10

我想要以下结果

Name Location Group Value Value1
 July   AAA    A       1    6
 Aug    BBB    B       2    7
 Jan    CCC    C            8
 Sep    CCC    C       3    
 Oct    DDD    D       4    9
 Nov    EEE    E       5    
 Nov    FFF    F            10

到目前为止,我已经使用了以下查询,但我无法得到结果..

SELECT A.Name, A.Location, A.Gruppo, A.value, AA.value1
FROM A
Full Outer Join AA
ON A.LOCATION=AA.LOCATION
and
A.GRUPPO=AA.GRUPPO
and 
A.name = AA.NAME

查询结果如下

 Name Location Gruppo value value 1
    July    AAA    A       1    6
    Aug     BBB    B       2    7
                                8
    Oct     DDD    D       4    9
                               10
    Sep     CCC    C       3    
    Nov     EEE    E       5    

谁能帮帮我。

【问题讨论】:

  • 您使用该查询得到什么结果?如果您收到错误,它会说什么?
  • 您的查询应该返回您的预期结果。如果没有,或者您遇到错误,您应该在您的问题中显示以寻求帮助

标签: sql oracle join oracle11g


【解决方案1】:

你没有得到你想要的结果的原因是你没有告诉查询为连接条件中的列选择不为空的列。

例如,如果行同时出现在 A 和 AA 中(或仅出现在 A 中),则 a.name 不会为空。但是,如果该行仅出现在 AA 中,则 a.name 将为空。在这种情况下,您希望它显示 aa.name,您可以使用 COALESCE(或 NVL)来实现:

WITH a AS (SELECT 'July' NAME, 'AAA' LOCATION, 'A' "GROUP", 1 VALUE FROM dual UNION ALL
           SELECT 'Aug' NAME, 'BBB' LOCATION, 'B' "GROUP", 2 VALUE FROM dual UNION ALL
           SELECT 'Sep' NAME, 'CCC' LOCATION, 'C' "GROUP", 3 VALUE FROM dual UNION ALL
           SELECT 'Oct' NAME, 'DDD' LOCATION, 'D' "GROUP", 4 VALUE FROM dual UNION ALL
           SELECT 'Nov' NAME, 'EEE' LOCATION, 'E' "GROUP", 5 VALUE FROM dual),
    aa AS (SELECT 'July' NAME, 'AAA' LOCATION, 'A' "GROUP", 6 VALUE1 FROM dual UNION ALL
           SELECT 'Aug' NAME, 'BBB' LOCATION, 'B' "GROUP", 7 VALUE1 FROM dual UNION ALL
           SELECT 'Jan' NAME, 'CCC' LOCATION, 'C' "GROUP", 8 VALUE1 FROM dual UNION ALL
           SELECT 'Oct' NAME, 'DDD' LOCATION, 'D' "GROUP", 9 VALUE1 FROM dual UNION ALL
           SELECT 'Nov' NAME, 'FFF' LOCATION, 'F' "GROUP", 10 VALUE1 FROM dual)
-- end of mimicking your tables a and aa with data in them. See the SQL below:
SELECT coalesce(A.Name, aa.name) NAME,
       coalesce(A.Location, aa.location) LOCATION,
       COALESCE(A."GROUP", AA."GROUP") "GROUP",
       A.value,
       AA.value1
FROM   A
       Full Outer Join AA
         ON A.LOCATION = AA.LOCATION
            AND A."GROUP" = AA."GROUP"
            and A.name = AA.NAME;

NAME LOCATION GROUP      VALUE     VALUE1
---- -------- ----- ---------- ----------
July AAA      A              1          6
Aug  BBB      B              2          7
Jan  CCC      C                         8
Oct  DDD      D              4          9
Nov  FFF      F                        10
Sep  CCC      C              3 
Nov  EEE      E              5 

【讨论】:

    【解决方案2】:

    您可以选择 3 次,一次使用内部连接,两次使用左连接和排除。然后将它们合并为一个结果集:

    SELECT A.Name, A.Location, A.Gruppo, A.Value, AA.Value1
    FROM A
    inner join AA
        ON  A.Location = AA.Location
        and A.Gruppo = AA.Gruppo
        and A.Name = AA.Name
    union all
    SELECT A.Name, A.Location, A.Gruppo, A.Value, AA.Value1
    FROM A
    left outer join AA
        ON  A.Location = AA.Location
        and A.Gruppo = AA.Gruppo
        and A.Name = AA.Name
    where Value1 is null
    union all
    SELECT AA.Name, AA.Location, AA.Gruppo, A.Value, AA.Value1
    FROM AA
    left outer join A
        ON  A.Location = AA.Location
        and A.Gruppo = AA.Gruppo
        and A.Name = AA.Name
    where Value is null
    

    【讨论】:

    • 为什么要做这么多工作? OP的解决方案比这个好很多,只需要稍作修改。
    • 我提供了一个我知道可行的解决方案。添加您的推荐作为答案,让每个人都能学到新东西。
    • 正确答案已经由另一位受访者提供。
    猜你喜欢
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多