如何使用like函数(Oracle sql)从另一个表中查找代码列表?

如何使用like函数(Oracle sql)从另一个表中查找代码列表?,sql,oracle,sql-like,Sql,Oracle,Sql Like,我有一张叫“学生桌”的桌子,上面有100多个标准ID, 我需要从“注册表”表映射学生注册表ID 学生表格格式 STD_ID 123 456 789 688 注册表格式 第1栏:学生注册号 第2栏:参考 Student_reg_ID Reference 23124 stden id 123 56142 customer refer 456 14328 refer - 789 67890 cod

我有一张叫“学生桌”的桌子,上面有100多个标准ID, 我需要从“注册表”表映射学生注册表ID

学生表格格式

STD_ID
123
456
789
688
注册表格式 第1栏:学生注册号 第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中获得它?

您在这里使用
这样的
是正确的。尝试此选项:

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
列是一个数字,那么在进行
类似的比较之前,您必须首先转换为文本,即使用以下方法:

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|$)');

看起来您希望
引用类似“%”| | std_id“
。如果它们相同,您也可以将我的演示复制到您的答案中。。。然后我会删除我的。@Nick Nah…不要删除,让它酝酿,最终它会得到投票。这只适用于所有STD_ID都是三位数的情况。否则会出现误报,例如id 1、2、3、12、23和123都与“stden id 123”匹配。根据样本数据,lousia更希望
rt.reference像“%”| | st.std_id“
。我认为没有理由怀疑这种边缘情况。@ThorstenKettner我同意你的观点,如果id不总是三位数,我已经提供了一个替代答案。