南屿/ 2025-10-11 23:45 采纳率: 0%
浏览 7

关于#sql#的问题:SQL笔试(数据数仓)

在数仓中,有两张表,t1和t2,字段相同,user_id可能重复,如果t2表中没有,但是t1表中有,说明这条数据是新增数据,例如t1中user_id=4这一条数据。如果t2表中有,但是t1表中没做,则说明这条数据被删除,如t2中user_id=5。如果user_id在t1和t2表中都存在,但是login_datetime不同,如t2中的第三条数据,则说明这条数据发生变更。现在需要将被删除的数据,新增的数据,变更的数据写入第三张t3表中,t3表的字段为user_id,login_datetime,change_type。change_type为删除,新增,变更其中之一。建表和数据字段如下:


create table t1(
user_id int,
login_datetime string)
insert into table t1 values(1,'2021-10-1');
insert into table t1 values(1,'2021-10-2');
insert into table t1 values(1,'2021-10-4');
insert into table t1 values(2,'2021-10-12');
insert into table t1 values(3,'2021-11-8');
insert into table t1 values(4,'2021-9-30');--新增

create table t2(
user_id int,
login_datetime string)
insert into table t2 values(1,'2021-10-1');
insert into table t2 values(1,'2021-10-2');
insert into table t2 values(1,'2021-10-3');--更改
insert into table t2 values(2,'2021-10-12');
insert into table t2 values(3,'2021-11-8');
insert into table t2 values(5,'2021-8-3');--删除
  • 写回答

6条回答 默认 最新

  • 阿里嘎多学长 2025-10-11 23:45
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题分析

    你在数仓中有两张表t1t2,字段相同,但可能存在重复的user_id。你想找出在t2表中存在但在t1表中不存在的数据,也就是新增数据。

    解决方案

    可以使用以下SQL语句来实现:

    SELECT t1.*
    FROM t1
    LEFT JOIN t2 ON t1.user_id = t2.user_id
    WHERE t2.user_id IS NULL;
    

    这条语句会将t1表中与t2表中无关联的数据返回,相当于找出t2表中存在但t1表中不存在的数据。

    注意

    如果t1表中有多条数据与t2表中一条数据关联,则会返回多条数据。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月11日