SQL:如何在文本中找到单词的精确匹配

SQL:如何在文本中找到单词的精确匹配,sql,ms-access-2007,match,multiple-tables,Sql,Ms Access 2007,Match,Multiple Tables,请容忍我,我是Access和SQL新手 我试图做的是编写一个SQL查询来过滤两个表——一个包含拆分为两列的单词,另一个包含文本。本质上,我想要的是一个新表,它提供两列单词和一列文本的所有精确匹配 这里有一个类似的数据库来模拟我想要的结果: Table A: FirstName: LastName: John Doe Jane Doe Josh Smi

请容忍我,我是Access和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)
;

这将取决于您希望它如何处理两个以上名称的全名,如“John Jacob Smith”,但是,假设您希望它忽略中间词, 然后试试看


下面是一种将每个
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是什么意思?当我写这篇文章时,我必须把它们改成表A和表B吗?@Cabral。这些是表的别名,使查询更易于阅读。在Access中,我认为在别名之前需要关键字
as
(这在其他数据库中是不需要的)。以下是我现在拥有的内容-从表A中选择Firstname、LastName、FullName作为A,在instr上选择TableB作为B(“”&B.FullName&’,&A.Firstname&’)>0和instr(“”&B.FullName&’,&A.LastName&’)>0;我仍然收到语法错误的错误消息。感谢您的帮助它似乎突出了语句的“join”部分,并表示“FROM”子句中存在语法错误。我在Access 2007中,如果这有什么不同的话……我搜索的不是名字,所以中间的单词很重要。它只是一个简化概念的类似数据库。谢谢你的帮助!
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