在Microsoft Access中,我有一个查询uniSelectedContacts和表可能。
让我说有可能我有这个:
Smith,John
Dough,John B
Ward,Jane Karon
Eggert,Samantha R
在uniSelectedContacts中我有这个:
Smith,John A 1552 1st Ave
Dough,John 1111 2st Ave
Ward,Jane K 2222 3st Ave
Eggert,Samantha Rachel 3333 1st Ave
我想找到名字可以识别的名字和姓氏。但是,由于中间初始变化,如果可能没有中间首字母,那么我想使用INNER JOIN来计算uniSelectedContacts中名字和姓氏的所有实例。如果可能有一个中间的首字母(名称),无论其中间的首字母或名称,我想说明uniSelectedContacts的名字和名字彼此相同的记录,以及中间的第一个字母的位置uniSelectedContacts的initial(name)匹配可能的中间首字母(名称)的第一个字母。所以在上面的例子中,应该返回:
Smith,John 1552 1st Ave
Dough,John B 1111 2st Ave
Ward,Jane Karon 2222 3st Ave
Eggert,Samantha R 3333 1st Ave
下面的查询很快,我想保持速度,但是 它将跳过所有上述记录(由于中间初始(名称)的差异:
SELECT possibles.fullname,
uniSelectedContacts.addresses,
uniSelectedContacts.cities,
uniSelectedContacts.us_states_and_canada,
uniSelectedContacts.zip_codes INTO PrepareForDuplicateCheck
FROM uniSelectedContacts INNER JOIN possibles ON uniSelectedContacts.TheName = possibles.fullname;
为了解决上述问题,我有:
SELECT possibles.fullname,
uniSelectedContacts.addresses,
uniSelectedContacts.cities,
uniSelectedContacts.us_states_and_canada,
uniSelectedContacts.zip_codes,
possibles.[firstname] AS Expr1,
possibles.[lastname] AS Expr2 INTO PrepareForDuplicateCheck
FROM uniSelectedContacts INNER JOIN possibles ON uniSelectedContacts.TheName = possibles.fullname
WHERE (((possibles.firstname)=Left([fullname],InStr([fullname],",")-1))
AND ((possibles.lastname)=Mid([fullname],InStrRev([fullname],",")+1)));
上面给出了“输入参数值possibles.firstname”消息。但我也不确定查询的基础逻辑是否会提供我期望的结果。
感谢您的回复。
答案 0 :(得分:0)
从发布的示例中告诉字段(列)有点困难,但我假设两个表都具有surnameforename格式的全名。
我并不是说这会很快,而是尝试一下。
SELECT p.aname,
u.addresses
u.addresses,
u.cities,
u.us_states_and_canada,
u.zip_codes
INTO PrepareForDuplicateCheck
FROM (
SELECT
Left([thename],IIf(InStrRev([thename]," ")>0,
InStrRev([thename]," ")-1,Len([thename]))) As AName,
addresses,
cities,
us_states_and_canada,
zip_codes
FROM uniSelectedContacts) u
INNER JOIN (
SELECT
Left([fullname],IIf(InStrRev([fullname]," ")>0,
InStrRev([fullname]," ")-1,Len([fullname]))) As AName
FROM possibles) AS p
ON u.AName = p.AName;
另一种可能性:
SELECT p.aname,
u.addresses
INTO PrepareForDuplicateCheck
FROM (
SELECT
Left([fullname],IIf(InStrRev([fullname]," ")>0,
InStrRev([fullname]," ")-1,Len([fullname]))) As AName
FROM possibles) p ,
uniSelectedContacts u
WHERE u.TheName Like p.AName & "*"