use*_*erx 4 sql oracle join inner-join
我有sql的问题.我想加入两个表,员工和班级讲师.条件是员工有像'u0871457'这样的unid列,其中班级讲师将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 和中的 长度相同INSTRUCTOR.如果它们长度不同会怎么样?也许有一个比另一个更多的填充.此外,他们将永远是位距领先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在EMPLOYEE id专栏中领先?可以有其他主角吗?领先者是否u代表某种东西(违反了第一种正常形式,但却发生了这种情况)?
| 归档时间: | 
 | 
| 查看次数: | 35033 次 | 
| 最近记录: |