连接两个表的前缀和非前缀字段的 SQL 查询

标签 sql ms-access left-join ms-query

我有两张 table b 在我的 Access 数据库中。在两个表中,我都有字段 ID。然而在表 我的 ID 字段以“31”为前缀,其中作为表 中的 ID 字段b 不是。

所以例如

table a                 table b

ID      field2          ID     field3
31L123  test123         L123   123test
31L122  test321         L122   321test

我的前缀字段表是从 Excel 导出中定期导入的,我知道我可以在 excel 级别删除前缀,但是有没有办法通过在 SQL 中的连接上使用某种 Concatenate 函数来连接 ID 字段上的两个表任何机会声明?

例如,以下内容:
SELECT Id, Field2, Field3 
FROM a LEFT JOIN b ON CONCATENATE('31', a.ID) = b.ID
WHERE a.Field2 = 13

我不确定这是否是正确的方法 - 这就是为什么我似乎无法找到有关我的问题的任何现有帮助(在导入之前忽略在 excel 级别处理字段)。

最佳答案

CONCATENATE()在 Access SQL 中不受支持。通常你会使用 &用于串联。

但是,我认为您不需要为您的加入 ON 连接任何东西健康)状况。只需使用 Mid()忽略前 2 个字符...

ON Mid(a.ID, 3) = b.ID

这应该可行,但随着表的增长,性能可能变得 Not Acceptable 。您应该通过“清理”a.ID 获得更好的性能。每次导入后立即取值...

UPDATE a
SET ID = Mid(ID, 3)
WHERE ID ALike '31%';

那么你的 SELECT查询的连接可以使用更简单、更快的 ON健康)状况 ...

ON a.ID = b.ID

确保 ID被索引以实现最佳性能。

关于连接两个表的前缀和非前缀字段的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36063830/

相关文章:

java - 具有显式自定义类的 getNamedQuery

ms-access - 如何使用 VBA 确定代码是否处于中断模式

java - 如何按订单从 MS-Access 检索记录?

mysql - 强制连接第一个表中的所有行

mysql - 对于具有大量连接的查询,运行 order by 速度较慢

php - 执行 PDO 查询时出现错误

sql - 将数据从数据库1复制到数据库2

c# - 错误: Unable to cast object of type 'System.Int32' to type 'System.String'

mysql - Laravel 5.2 - 在子查询上使用 Left Join 时出现奇怪的结果

php - MySQL LEFT JOIN 问题与三个 WHERE 语句