【问题标题】:sql joins returns multiple row than expectedsql 连接返回多于预期的行
【发布时间】:2020-11-17 16:53:51
【问题描述】:

我想将表 zz_value 与 zz_gg 连接起来。

表 zz_value 看起来像:

nach_id  ins_id  pos_id  value data_id gg_id
2416    647415  176959  266355  166991 9863
2416    647421  176959  266355  166991 9863
2416    647422  176959  266355  166991 9863
2416    647425  176959  266355  166991 9863
2416    647427  176959  266355  166991 9863
2416    647429  176959  266355  166991 9863
2416    647430  176959  266355  166991 9863
2416    647431  176959  266355  166991 9863
2416    647412  176959  266355  175068 9867
2416    647423  176959  266355  175068 9867
2416    647428  176959  266355  175068 9867
2416    647433  176959  266355  175068 9867
2416    647434  176959  266355  175068 9867
2416    647411  176959  266355  175069 9868
2416    647414  176959  266355  175069 9868
2416    647417  176959  266355  175069 9868
2416    647418  176959  266355  175069 9868
2416    647419  176959  266355  175069 9868
2416    647420  176959  266355  175069 9868
2416    647413  176959  266355  175070 9869
2416    647416  176959  266355  175070 9869
2416    647424  176959  266355  175070 9869
2416    647426  176959  266355  175070 9869
2416    647432  176959  266355  175070 9869

表 zz_gg 看起来像:

nach_id  ins_id  pos_id data_id gg_id
2416    647410  176959  266354  9868
2416    647389  176959  266352  9863
2416    647388  176959  266352  9869
2416    647392  176959  266352  9867
2416    647394  176959  266352  9868
2416    647391  176959  266352  9863
2416    647393  176959  266352  9869
2416    647387  176959  266352  9868
2416    647390  176959  266352  9867
2416    647397  176959  266353  9863
2416    647396  176959  266353  9867
2416    647395  176959  266353  9869
2416    647402  176959  266353  9869
2416    647401  176959  266353  9868
2416    647398  176959  266353  9863
2416    647399  176959  266353  9863
2416    647400  176959  266353  9868
2416    647406  176959  266354  9868
2416    647409  176959  266354  9867
2416    647405  176959  266354  9863
2416    647404  176959  266354  9867
2416    647403  176959  266354  9863
2416    647408  176959  266354  9869
2416    647407  176959  266354  9863

我使用了以下语句。

select t.nach_id,t.pos_id,t.gg_id,g.data_id,t.value
      from zz_value t
      left  join zz_gg g          
             on t.gg_id = g.gg_id
             and g.pos_id = t.pos_id
             and g.nach_id = t.nach_id
             where t.pos_id = 176959
             and t.nach_id = 2416;

预期输出

nach_id pos_id   gg_id  data_id  value
2416    176959   9863   266353  166991
2416    176959   9863   266354  166991
2416    176959   9863   266354  166991
2416    176959   9863   266354  166991
2416    176959   9863   266353  166991
2416    176959   9863   266353  166991
2416    176959   9863   266352  166991
2416    176959   9863   266352  166991
2416    176959   9867   266353  175068
2416    176959   9867   266352  175068
2416    176959   9867   266352  175068
2416    176959   9867   266354  175068
2416    176959   9867   266354  175068
2416    176959   9868   266353  175069
2416    176959   9868   266354  175069
2416    176959   9868   266353  175069
2416    176959   9868   266352  175069
2416    176959   9868   266352  175069
2416    176959   9868   266354  175069
2416    176959   9869   266353  175070
2416    176959   9869   266352  175070
2416    176959   9869   266352  175070
2416    176959   9869   266354  175070
2416    176959   9869   266353  175070

当我加入此表时,我希望有 24 行,但结果是 100 多行。 我也尝试过使用简单连接而不是左连接。它也显示了相同的结果。

所以如果连接不起作用,是否有任何其他方法可以获得所需的输出。

【问题讨论】:

    标签: sql join left-join oracle12c


    【解决方案1】:
    1. 您的 SQL 语句与您的表不匹配:zz_value 中没有“语言”列
    2. 当我运行您的 SQL(没有此语言列)时,它返回 4 行 - 所以似乎没有任何问题

    请您检查您的数据/SQL 并确保它们是准确的,因为如果您看到返回 16 行,您编写的内容与正在运行的内容似乎不匹配

    更新 1

    根据您提供的数据和 SQL 中的 JOIN 条件,zz_value 中的每条记录都将匹配 zz_gg 表中的多条记录 - 这就是您在结果集中获得超过 24 条记录的原因。

    例如,您在 zz_gg 中有 8 条记录具有以下值:

    GG_ID   POS_ID  NACH_ID COUNT(1)
    9863    176959  2416    8
    

    因此,zz_value 中具有这些值的每条记录都会在结果集中返回 8 条记录

    【讨论】:

    • 嗨,我已经改变了价值观和声明。
    • 它仍然不匹配 - 在您提供的数据中,没有 t.pos_id = 176962 或 t.nach_id = 1234 的记录(这是您的 SQL 中的记录)
    • 是的,我现在已经改变了。对不起这个错误
    • 如果连接不起作用,是否有任何其他方法可以让我获得预期的输出
    • 当zz_gg中有多个匹配的记录对应zz_value中的每条记录时,您要检索zz_agg.data_id的哪个值?
    猜你喜欢
    • 2021-07-15
    • 2021-10-20
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多