首页 > 解决方案 > 如何使用类似函数(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 中获取它?

标签: sqloraclesql-like

解决方案


你在正确的轨道上使用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|$)');

推荐阅读