sql - 如何使用类似函数(Oracle sql)从另一个表中查找代码列表?
问题描述
我有表调用“student_table”表,它有 100 多个 STD_ID,我需要从“Reg_table”表映射 Student_reg_ID
学生表格式
STD_ID
123
456
789
688
Reg_table 格式第 1 列:Student_reg_ID 第 2 列:参考
Student_reg_ID Reference
23124 stden id 123
56142 customer refer 456
14328 refer - 789
67890 code ref : 688
需要输出
STD_ID Student_reg_ID
123 23124
456 56142
789 14328
688 14328
我怎样才能得到如上图所示的输出?
我不想在下面的类似函数中给出超过 100 个 STD_ID
STD_ID Like '%123% or '%456% or .......
如何在单个 sql 中获取它?
解决方案
你在正确的轨道上使用LIKE
这里。试试这个选项:
SELECT
st.STD_ID,
rt.Student_reg_ID
FROM student_table st
LEFT JOIN Reg_table rt
ON rt.Reference LIKE '%' || st.STD_ID || '%';
请注意,如果该STD_ID
列是一个数字,那么您首先必须在进行LIKE
比较之前转换为文本,即使用这个:
LEFT JOIN Reg_table rt
ON rt.Reference LIKE '%' || TO_CHAR(st.STD_ID) || '%';
编辑:
考虑到这些STD_ID
值可能并不总是三位数,我们可以REGEXP_LIKE
在加入时使用强制完全匹配:
SELECT
st.STD_ID,
rt.Student_reg_ID
FROM student_table st
LEFT JOIN Reg_table rt
ON REGEXP_LIKE(rt.Reference, '(^|\s)' || st.STD_ID || '(\s|$)');
推荐阅读
- javascript - 如何在angularjs中获取具有动态ID的父级的子级计数
- php - php - CSV 表格,带有在页面之间移动的按钮
- python - 如何使用 python 设计一个巴特沃斯滤波器,指定我的截止频率为 0.1 Hz?
- mongodb - mongoDB Atlas中的“上下文”是什么?
- api - 基于外部 api 数据的 express 动态路由
- python - 使用谷歌云功能写入谷歌云扳手时出错
- c++ - STL 中的 Sort 方法不能交换向量中的内容
- python - 在 DataFrame 之间复制现有列
- ios - 如果 iOS 应用程序转移到另一个用户帐户,那么它的 url 会改变吗?
- java - 通过 Http Params 将复杂对象列表发送到 Spring MVC Rest Controller