【问题标题】:Multiple table join query - IDs and data tables多表连接查询 - ID 和数据表
【发布时间】:2021-09-09 16:21:52
【问题描述】:

SOLVED 原来是我的 where 子句抛出了结果,我改变了这个并将 where 子句添加到 ON 语句中

我需要一些帮助。

我有一个包含 2500 万个 ID 的表和 4 个包含 ID 和数据的表。我需要使用这 2500 万个 ID 以及 4 个表中的关联表数据创建一个新表。每个数据表都不会包含完整的 2500 万个 ID。举个例子;

ID 表:

ID
A
B

表 1

ID measure_a measure_b
B 1 3

表 2

ID measure_f measure_g
A 3 4

等等。

预期输出:

ID measure_a measure_b measure_f measure_g
A 3 4 NULL NULL
B NULL NULL 1 3

最重要的是 2500 万个 ID 进入决赛桌。我尝试了多次连接,但最终得到的 ID 数量大大减少,我认为这是由于连接条件不匹配的 ID 被过滤掉了。

非常感谢任何帮助。

【问题讨论】:

    标签: hive hiveql


    【解决方案1】:

    你会使用left joins:

    select ids.id, t1.measure_a, t1.measure_b, t2.measure_f, t2.measure_g
    from ids left join
         table1 t1
         on ids.id = t1.id left join
         table2 t2
         on ids.id = t2.id;
    

    【讨论】:

    • 您好,感谢您的回复。这不起作用,因为在查询结束时(在这种情况下,在 4 个左连接之后)当初始 ID 表为 25m 时,我留下了数万条记录。我需要保留所有 ID,加入似乎会丢弃任何不匹配的 ID,即使是左连接也是如此。例如,只关注 1 个左连接,将新表的记录数减少到 830 万 - 随后这是它已连接到的数据表的计数。
    • 我认为这应该可以,请检查一下。看到他正在使用 ids.id 对两个表进行左连接。
    • 我确实在做同样的事情(使用 ID 表中的 ID 作为所有连接的连接条件)。
    • 我发现了这个问题,我的 where 子句过滤器正在使用扳手。将其换出并将条件添加到 ON 语句中修复了它。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    相关资源
    最近更新 更多