sql - 使用 Impala 在 id 字段上连接两个表
问题描述
我想使用 Impala 加入 HDFS 中有两个表。一个是 Employee_Logs,另一个是 HR_Data。
查询:
select e.employee_id, e.action from Employee_Logs e where e.employment_status_desc = 'Active'
select h.employee_id, h.name from HR_Data h
Employee_Logs:
employee_id action
2325255b login
51666164 login
51666164v login
r1211 logoff
r18552421 login
HR_数据:
employee_id name
2325255 Rob
51666164 Tom
r1211 Tammy
r18552421 Ron
我想加入他们,使数据看起来像这样:
employee_id action name
2325255b login Rob
51666164 login Tom
51666164v login Tom
r1211 logoff Tammy
r18552421 login Ron
如果两个表上的employee_id 字段都匹配,我可以轻松加入,但是同一用户可以在其员工ID 后面有一个“b”或“v”来指定该帐户是否像管理员帐户一样被提升。一些用户帐户在 id 前面有一个“r”,但在两个表中都是这种情况。
有没有一种方法可以让我执行一些操作并在 Employee_Logs 表中创建一个新字段,例如从员工 ID 的末尾去掉“v”和“b”然后加入,还是有更好的方法?
解决方案
Select employee_id,action,h1.name from Employee_Logs
where RTRIM(employee_id,'b','v'),name IN (Select employee_id,name
from HR_DATA as h1);
您可以使用上述子查询,因为您拥有 Employee_logs 本身所需的大部分记录,并参考公共 ID 来获取每条记录的名称。或者左连接是在这种情况下最好使用的,这意味着将给出两个表共有的数据,保持左表数据为多数
推荐阅读
- css - 尝试在 vs 代码中编译 SASS 时出现读取错误
- swift - 如何使用 NSPasteboard 实现“复制和粘贴”到 Finder?
- vba - 为什么代码在调试中可以正确运行?
- javascript - Javascript代码适用于箭头函数而不是普通函数
- java - ORA-00933: SQL 命令未正确结束 - WHERE 子句
- java - 专用 Spring Container 与 Spring Scope
- java - MacOS 上的 OpenJDK8 和 JavaFX
- node.js - 如何将 Express Nodejs 中的发布请求对象导出到另一个模块
- python - Pandas groupby concat/merge?转换顺序时间序列
- llvm - 将 i1 类型转换为整数值