Sql 当需要在文本列上连接两个表时,该怎么办?

Sql 当需要在文本列上连接两个表时,该怎么办?,sql,vba,ms-access-2010,Sql,Vba,Ms Access 2010,我有两个表,一个叫做AllData的链接表和一个叫做MIUOffset的普通表。它们都有一个名为MIUType的文本列。我需要连接MIUType上的两个表,而AllData.MIUType=MIUOffset.MIUType上的internal join MIUOffset的连接起作用,最终速度慢得令人无法忍受 有没有什么方法可以连接字符串字段上的表,并使其工作速度接近于连接数字字段的速度 我的后备计划是修改其数据库中的链接表,使其具有一个整数字段作为MIUType数据的数字键,但如果可以避免的

我有两个表,一个叫做AllData的链接表和一个叫做MIUOffset的普通表。它们都有一个名为MIUType的文本列。我需要连接MIUType上的两个表,而AllData.MIUType=MIUOffset.MIUType上的
internal join MIUOffset的连接起作用,最终速度慢得令人无法忍受

有没有什么方法可以连接字符串字段上的表,并使其工作速度接近于连接数字字段的速度

我的后备计划是修改其数据库中的链接表,使其具有一个整数字段作为MIUType数据的数字键,但如果可以避免的话,我宁愿不这样做

我最终要做的是,在where语句中添加/减去列,并且MIUOffset表具有每个唯一MIUType的偏移量。结果方程类似于
AllData。[0]+MIUOffset.Offset<-95

因此,除了在核心数据结构中添加一个与MIUType数据等价的数字键,或者重新构造代码以循环遍历每个MIUType,然后在最后添加结果之外,还有什么方法可以做到这一点

我希望解决方案严格在sql中,但这一切都是在VBA中完成的,所以如果有人有任何建议,还有其他选择

有没有什么方法可以连接字符串字段上的表,并使其工作速度接近于连接数字字段的速度

你没有。相反,您需要规范化您的表。根据定义,连接数字字段比连接字符串字段快得多

MIUType
中的值在两列中重复了多少次

我的后备计划是修改其数据库中的链接表,使其具有一个整数字段作为MIUType数据的数字键,但如果可以避免的话,我宁愿不这样做

这不是一个“应急计划”,它本来应该是正确的设计。我不知道你为什么要避免它

创建一个单独的表以一次性存储所有可能的值,并将每个值映射到一个数字ID(如果链接的源位于SQL Server上,则自动编号主键字段将执行/
identity


然后向表中添加一个
MIUTypeId
列,并运行更新以通过数值ID链接这些值。然后删除冗余的
MIUType
string列,从现在开始,您将加入
MIUTypeId
以获取相关的字符串值。如果这会中断20个报告和15个视图,则不要删除该列,而是修复20个报告和15个视图以使用新字段,然后在字符串列上的依赖项全部消失后,将其删除。

加入链接表时,MS Access必须将所有行传输到本地计算机。当桌子很大时,您可能需要花很多时间来体验。是否可以将本地表迁移到DB服务器上?此字段是否不经常修改?否则,添加索引可以增强搜索和加入。但首先,我建议您检查@Mat'sMug的答案是否可以实现。重复< MIUType > <代码>中的更多值,你应该考虑他的解决方案。我同意前面的评论。在两个表中的
MIUType
字段上缺少索引,以及将本地与链接表连接起来,这可能比文本字段的问题更大。它不在那里,因为它只是刚刚出现,我需要它,我刚刚遇到这种情况。我猜没有一个可分页的方法,所以我只需要在列中添加一个单独的表,以及一个事件或其他东西,以确保在数据库中添加新的MIUType时,表得到更新。谢谢