bạn có thể sử dụng phép nối để yêu cầu khớp cả địa chỉ và tên người.
SELECT
(keyTblSp.RANK * 3) AS [Rank],
sp.*
FROM Employee sp
INNER JOIN
CONTAINSTABLE(Employee, *, 'John OR Hamburg', 1000) AS keyTblSp
ON sp.EmployeeId = keyTblSp.[KEY]
join
(
SELECT
(keyTbl.RANK * 2) AS [Rank],
sp.*
FROM Employee sp
LEFT OUTER JOIN [Address] addr ON addr.EmployeeId = sp.EmployeeId
INNER JOIN
CONTAINSTABLE([Address], *, 'John OR Hamburg', 1000) AS keyTbl
ON addr.AddressId = keyTbl.[KEY]
UNION ALL
SELECT
(keyTbl.RANK * 2) AS [Rank],
sp.*
FROM Employee sp
LEFT OUTER JOIN [Address] addr ON addr.EmployeeId = sp.EmployeeId
LEFT OUTER JOIN [City] cty ON cty.CityId = addr.CityId
INNER JOIN
CONTAINSTABLE([City], *, 'John OR Hamburg', 1000) AS keyTbl
ON cty.CityId = keyTbl.[KEY]
) addr_matches
on addr_matches.EmployeeId = sp.EmployeeId
mà tôi nghĩ sẽ cung cấp cho bạn kết quả mà bạn đã chỉ định, rõ ràng là điều này yêu cầu cả tên và cụm từ tìm kiếm địa chỉ để tìm kiếm trả về bất kỳ kết quả nào. Bạn đã không chỉ định điều gì sẽ xảy ra nếu ai đó chỉ tìm kiếm 'John', nếu bạn luôn nhận được cả tên và địa chỉ ở trên, tôi nghĩ sẽ hoạt động tốt.