df-drills pandas · Polars · DuckDB SQL · DuckDB Relational 题目列表 登录

两份名单对账

中等 11-join 连接 joinfull-outercoalescereconcile

两个系统各有一份客户名单,按 id 对账。

  • 两张表里 id 都不为 null,也都不重复。
  • 两边出现过的每个 id 都输出一行:只在 A 里的、只在 B 里的、两边都有的。
  • id:合并成一列(不能出现两列 id,也不能因为一边缺失而为 null)。
  • in_a / in_b:布尔值,该 id 是否出现在 A / B 中。判断依据是 id 是否出现,即使那一行的 name 为 null,也算出现过。
  • name_a / name_b:两边各自的名字;该 id 不在某一边时,对应的名字为 null。

输入

  • sys_a(id, name)
  • sys_b(id, name)

输出

列为 id, in_a, in_b, name_a, name_b,行顺序不限。

输入表 (case base,共 2 个 case:base、nullname)

sys_a local/base/sys_a
#idint64namestring
1 1 Ann
2 2 Bob
3 3 Cat
4 5 Eve
共 4 行
sys_b local/base/sys_b
#idint64namestring
1 2 Bob
2 3 Kat
3 4 Dan
4 6 Fay
共 4 行

期望输出 (case base,行顺序不限)

#idInt64in_aBooleanin_bBooleanname_aStringname_bString
1 2 True True Bob Bob
2 3 True True Cat Kat
3 1 True False Ann null
4 5 True False Eve null
5 4 False True null Dan
6 6 False True null Fay
共 6 行