当前位置: 首页 > 面试题库 >

如何基于字段的子字符串值联接两个表?

卢骏俊
2023-03-14
问题内容

我在使用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代表某种东西吗(违反了第一范式,但那确实发生了)?



 类似资料:
  • 问题内容: 我有两个表和相关的Java映射。 这是我的Java实体。国家POJO: 和用户POJO: 问题是,我怎么能加入到在Hibernate中使用注释?当我使用Hibernate创建User对象时,我需要自动绑定这两个字段(代码和countryCode)。 问题答案: 您需要从映射到实体,并从映射到:

  • 问题内容: 我有两个表和字段。我想同时参加这两个领域。我试过了 可以,但是非常慢。有一个更好的方法吗? 问题答案:

  • 我有一个弹性搜索映射,包含一个语言代码的字段,如EN、DE、ES、FR等。如果用户开始用英语搜索,我想在搜索结果中增加所有英语文档;法语、西班牙语、德语等也一样。 我想,应该这样做: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#function

  • 如何在不打印的情况下将stringList中的所有字符串连接成一个字符串? 例如,

  • 问题内容: 我有2个数据框,格式如下: 完整的df_search有15,000个项目。df_all有550,000个项目。我正在尝试基于文件字符串中的搜索项目字符串来合并两个数据框。我想要的输出是这样的: 简单的数据框合并不起作用,因为字符串永远不会完全匹配(它始终是子字符串)。我还根据其他关于stackoverflow的问题尝试了以下方法: 这给了我df_all中所有找到的项目的完整列表,但是我

  • 问题内容: 想要改善这篇文章吗? 提供此问题的详细答案,包括引文和为什么答案正确的解释。答案不够详细的答案可能会被编辑或删除。 我需要一个函数来返回两个单词(或两个字符)之间的子字符串。我想知道是否有实现该功能的php函数。我不想考虑正则表达式(嗯,我可以做一个,但实际上并不认为这是最好的方法)。思维与功能。这是一个例子: 我们调用该函数: 它返回:“我想要一个蛋糕”。 提前致谢。 更新: 嗯,到