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) 
+0

这实际上并不是我正在寻找的名称,所以中间的单词很重要。这只是一个类似的数据库来简化这个概念。感谢您的帮助! – Cabral 2013-05-07 13:33:53

这里是比较每个FullNameFirstnameLastName的方法:

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的开头和末尾附加一个空格,然后查找空格填充的名字和姓氏。

+0

在全名前后添加空格非常巧妙,并且一定会解决我的问题。但是,我仍然收到一条错误消息,指出FROM子句中存在语法错误。小写字母a和b是什么意思?当我写出这些信息时,是否必须将它们更改为TableA和TableB? – Cabral 2013-05-07 13:26:57

+0

@Cabral。 。 。这些是表的别名,这使得查询更容易阅读。在Access中,我认为在别名之前需要关键字'as'(这在其他数据库中不需要)。 – 2013-05-07 13:31:13

+0

这里是我现在有 - 选择名字,姓氏,全名从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