我遇到了 sql 问题。我想加入两个表,员工和班级讲师。条件是员工的 unid 列如“u0871457”,而班级讲师的 EmplId 为“00871457”。
我只想将 EmplId 的第一个字符替换为 'u' 来连接以匹配来自 unid 的字符串。我怎样才能做到这一点?到目前为止我已经尝试过了:
select e.name, i.name
from Employee e
inner join Instructor i on SUBSTR(e.id,1, LENGTH(e.id )) = SUBSTR(i.id,1, LENGTH(i.id ))
但这会导致结果集为空。
任何帮助将不胜感激。谢谢你的时间!
有很多方法可以做到这一点。在采用特定方法之前,最好先查看各种方法的解释计划。例如,如果有一个基于函数的索引EMPLOYEE
例如SUBSTR(id, 2, LENGTH(id) - 1)
那么你会想在你的查询中使用它:
SELECT e.name, i.name
FROM employee e INNER JOIN instructor i
ON SUBSTR(e.id, 2, LENGTH(e.id) - 1) = SUBSTR(i.id, 2, LENGTH(i.id) - 1);
另一个问题是,如果id
列的长度始终相同EMPLOYEE
and INSTRUCTOR
。如果它们的长度不同怎么办?也许一个比另一个有更多的填充。还有,他们会永远是digits除了领先的u
?如果是这样,那么尝试安全可能是值得的TO_NUMBER()
转换:
SELECT e.name, i.name
FROM employee e INNER JOIN instructor i
ON TO_NUMBER(REGEXP_SUBSTR(e.id, '\d+$')) = TO_NUMBER(REGEXP_SUBSTR(i.id, '\d+$'));
然而,您可能还需要考虑另一件事——领先是否有原因?u
in the EMPLOYEE
id
柱子?还能有其他主角吗?是否领先u
代表什么(违反第一范式,但这种情况发生了)?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)