如何使用like函数(Oracle sql)从另一个表中查找代码列表?
我有一张叫“学生桌”的桌子,上面有100多个标准ID, 我需要从“注册表”表映射学生注册表ID 学生表格格式如何使用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
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不总是三位数,我已经提供了一个替代答案。