从第一个表中获取所有Users
,并且在另一个表中有匹配的单词;
我有Users
表,其中包含FullName
列,该列已被索引Full Text Search
。有时第一个“单词”是名称,有时第一个“单词”是FullName
列中的姓;
像约翰·史密斯或史密斯·约翰一样。
还有另一个只有本地名字的表。
我想获取所有具有匹配本地名称的用户。
Users Table:
John Smith
Rebecca Mark
Maria Anna
Lance Maria
Emilia Clark
Snow John
Natalie Butler
Name Table:
Maria
Smith
Result of Query:
John Smith
Maria Anna
Lance Maria
Snow John
我只能用Contains函数做一个名字。
SELECT * FROM Users WHERE CONTAINS(FullName, 'John');
但是我需要Name Table
中的每一行。
FullName
中的每一行都包含任何名称表...但是在SQL查询中。
答案 0 :(得分:1)
使用连接和喜欢进行匹配
select u.* from table_users u join table_name b on
u.users like concat('%',b.name,'%')
答案 1 :(得分:1)
您可以使用exists
:
select u.*
from users u
where exists (select 1
from nametable n
where u.fullname like '%' + n.name + '%'
);
如果要避免名称部分匹配,请考虑定界符:
where exists (select 1
from nametable n
where ' ' + u.fullname + ' ' like '% ' + n.name + ' %'
);
答案 2 :(得分:1)
为避免在搜索'Maria'
且匹配名称为'Marianne'
的情况下,
请检查2个条件:(1)名称开头或(2)在FullName
的末尾:
(1):
SELECT u.*
FROM Users u INNER JOIN Name n
ON
u.FullName LIKE concat(n.name, ' %')
OR
u.FullName LIKE concat('% ', n.name)
或(2):
SELECT u.*
FROM Users u INNER JOIN Name n
ON
concat(' ', u.FullName, ' ') LIKE concat('% ', n.name, ' %')