我有两张 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/