SQL:如何在文本中查找单词的精确匹配
请耐心等待,我是Access和SQL的新手。SQL:如何在文本中查找单词的精确匹配
我想要做的是写一个SQL查询来通过两个表进行过滤 - 一个包含分成两列,另一个包含文本的单词。从本质上讲,我想要的是一个新的表格,它将文字列中的两列单词的所有精确匹配给我。
下面是一个类似的数据库来模拟一下我想要的结果:
Table A:
FirstName: LastName:
John Doe
Jane Doe
Josh Smith
James Jones
David Johnson
Table B:
FullName:
Jake Davidson
Mike Peters
Jason James
John Michael Smith
Query Result:
FirstName: LastName: FullName:
John Doe John Michael Smith
Josh Smith John Michael Smith
James Jones Jason James
(注意到大卫 - 戴维森的比赛没有拿出即我想只有完全匹配。)
所以帮我填补空白:
SELECT TableA.FirstName,TableA.LastName, TableB.FullName
FROM TableA,TableB
WHERE TableB.FullName LIKE (has an exact match with TableA.FirstName--not sure what to put)
UNION
SELECT TableA.FirstName,TableA.LastName, TableB.FullName
FROM TableA,TableB
WHERE TableB.FullName LIKE (has an exact match with TableA.LastName--not sure what to put)
;
这将取决于你希望它带有两个以上名称FullNames,如“约翰·雅各布·史密斯”做什么,但是,假设你要它忽略中间字[S], 然后尝试
Select firstname, lastname, fullname
from tableA a
Join tableb f
On f.firstname = Mid(a.fullname, 1, InStr(a.fullname, " ")-1)
Join tableb l
On l.lastname = Mid(a.fullname, InStrRev(a.FullNamee, " ")+1)
这里是比较每个FullName
既Firstname
和LastName
的方法:
select a.Firstname, a.LastName, b.FullName
from tableA as a inner join
tableB as b
on instr(' '&b.FullName&' ', ' '&a.FirstName&' ') > 0 and
instr(' '&b.FullName&' ', ' '&a.Lastname&' ') > 0
它假设为名称的分隔符是空间(如你的例子)。比较在FullName
的开头和末尾附加一个空格,然后查找空格填充的名字和姓氏。
在全名前后添加空格非常巧妙,并且一定会解决我的问题。但是,我仍然收到一条错误消息,指出FROM子句中存在语法错误。小写字母a和b是什么意思?当我写出这些信息时,是否必须将它们更改为TableA和TableB? – Cabral 2013-05-07 13:26:57
@Cabral。 。 。这些是表的别名,这使得查询更容易阅读。在Access中,我认为在别名之前需要关键字'as'(这在其他数据库中不需要)。 – 2013-05-07 13:31:13
这里是我现在有 - 选择名字,姓氏,全名从TableA AS A,TableB AS B ON instr(''&B.FullName&'',''&A.FirstName&'')> 0和instr(''& B.FullName&'',''&A.Lastname&'')> 0;我仍然收到语法错误的错误消息。感谢您的帮助 – Cabral 2013-05-07 13:47:10
这实际上并不是我正在寻找的名称,所以中间的单词很重要。这只是一个类似的数据库来简化这个概念。感谢您的帮助! – Cabral 2013-05-07 13:33:53