Access 中部分列的内部联接
Posted
技术标签:
【中文标题】Access 中部分列的内部联接【英文标题】:Inner join on a partial column in Access 【发布时间】:2015-05-11 18:46:52 【问题描述】:我正在尝试在 MS Access 2010 中连接两个表,其中连接条件为 part of(A.col1) = B.col2
。到目前为止,我还无法弄清楚如何做到这一点。
我的两个表有这些关键列:
-
表 1 的列
ICD9 Code-Description
* 具有如下值:842.00 - Sprain/strain, wrist
924.11 - Contusion, knee
表 2 的列 Dx
具有如下值:842
924.11
我已经尝试了这两个加入条件:
FROM Table1
INNER JOIN Table2 ON Table1.Replace(LTrim(Replace(Left(ICD9Code-Description],
(InStr(1,[ICD9Code-Description]," "))-1),"0"," "))," ","0")
= Table2.Dx
和
SELECT ICD9
FROM Table2 INNER JOIN
(SELECT Replace(LTrim(Replace(Left([ICD9 Code-Description],
(InStr(1,[ICD9 Code-Description]," "))-1),"0"," "))," ","0") AS ICD9
FROM Table1)
ON Diag.DX = ICD9
Access 都不喜欢。
如果可能的话,我想避免将连接条件部分拉到Table1
中自己的列中。
Access 方法是什么?
*不要因为列名而讨厌我。不是我创造的,我只是要支持它。
【问题讨论】:
【参考方案1】:Val()
函数“将字符串中包含的数字作为适当类型的数值返回。”(请参阅 Access 内置的 Val 函数帮助主题-在帮助系统中。)
对于您的情况,“整洁的事情”是它从字符串中读取字符,直到遇到不能成为有效数字一部分的字符。但它不会引发错误。它只保留它已经收集的数字字符并忽略其余部分。
这是立即窗口中的两个示例...
? Val("842.00 - Sprain/strain, wrist")
842
? Val("924.11 - Contusion, knee")
924.11
所以Val()
应该使您的JOIN
更简单,即使您还需要将它应用于Table2.Dx
字符串...
FROM
Table1 INNER JOIN Table2
ON Val(Table1.[ICD9Code-Description]) = Val(Table2.Dx)
【讨论】:
是的,很遗憾,Table2.D
实际上是一个文本字段。我才意识到这一点。 Str(Val(ICD9Code-Description])) = Table2.Dx
修复了这个问题,但是现在我没有得到任何结果而不是错误。我将不得不再打我的头。好消息是Table2.Dx
有Dx = 842
作为文本字符串,而不是Dx=842.00
,所以简单的Str()
修复了它。不过,谢谢,Val()
是一个非常有用的功能,并且比之前的灾难更容易阅读!
你先生,真是个天才!!我不确定为什么 Str(val()) = ...
没有,但我会接受它!我还想扼杀设计这个数据库的人,因为他疯狂的列名和列中数据的愚蠢组合,但幸运的是,他不再在这里工作。如果他是,我可能会身陷囹圄……:/
我很高兴它可以工作,但对我来说似乎有太多的运行时箍。 :-) 如果你被那个桌子设计困住了,我唯一能提供的就是同情。 :-0
修复它的机会来了,但现在,我被困住了,很高兴接受你的同情......以上是关于Access 中部分列的内部联接的主要内容,如果未能解决你的问题,请参考以下文章
带有内部联接和子查询的 Microsoft Access 更新语句