我的Access数据库中有两个表 a 和 b 。在两个表中我都有字段ID。但是,在表格 a 中,我的ID字段前缀为“31”,而表格 b 中的ID字段不是。
所以例如
table a table b
ID field2 ID field3
31L123 test123 L123 123test
31L122 test321 L122 321test
我的前缀字段表是从Excel导出定期导入的,我知道我可以删除excel级别的前缀但是有没有办法通过在连接上使用某种Concatenate函数来连接ID字段上的两个表在SQL语句中任何机会?
所以例如:
SELECT Id, Field2, Field3
FROM a LEFT JOIN b ON CONCATENATE('31', a.ID) = b.ID
WHERE a.Field2 = 13
我不确定这是否是正确的方法 - 这就是为什么我似乎无法找到任何关于我的问题的现有帮助(忽略在导入之前处理excel级别的字段)。
答案 0 :(得分:4)
CONCATENATE()
。通常,您将使用&
进行连接。
但是,我认为您不需要为您的加入ON
条件连接任何内容。只需使用Mid()
忽略前两个字符......
ON Mid(a.ID, 3) = b.ID
这应该有效,但随着时间的推移,表格可能变得不可接受。你应该通过"清洁"来获得更好的表现。每次导入后立即显示a.ID
个值...
UPDATE a
SET ID = Mid(ID, 3)
WHERE ID ALike '31%';
然后,您SELECT
查询的加入可以使用更简单,更快ON
条件...
ON a.ID = b.ID
确保将ID
编入索引以获得最佳效果。
答案 1 :(得分:1)
为什么不将您的查询更新为:
SELECT Id, Field2, Field3
FROM a LEFT JOIN b ON RIGHT(a.ID,4) = b.ID
WHERE a.Field2 = 13
您也可以使用a.ID,并从a.ID的长度中减去2位数,然后在a.ID超过6个字符宽的情况下使用最右边的字符。而且,重写,我们得到:
SELECT Id, Field2, Field3
FROM a LEFT JOIN b ON RIGHT(a.ID,LEN(a.ID)-2) = b.ID
WHERE a.Field2 = 13
希望这有帮助吗?
答案 2 :(得分:0)
我只想添加" 31"使用MS Access的字符串连接:
SELECT Id, Field2, Field3
FROM a LEFT JOIN
b
ON ("31" & a.ID) = b.ID
WHERE a.Field2 = 13;
对于此查询,某些数据库仍会在b.ID
上使用索引。