आप पते और व्यक्तियों के नाम दोनों में एक मैच की आवश्यकता के लिए एक जॉइन का उपयोग कर सकते हैं।
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
जो मुझे लगता है कि आपको आपके द्वारा निर्दिष्ट परिणाम देगा, जाहिर है, हालांकि, किसी भी परिणाम को वापस करने के लिए खोज के लिए एक नाम और पता खोज शब्द दोनों की आवश्यकता होती है। आपने यह निर्दिष्ट नहीं किया कि अगर कोई 'जॉन' की खोज करता है तो क्या होता है, अगर आपको हमेशा नाम और पता दोनों मिलेंगे तो मुझे लगता है कि उपरोक्त ठीक काम करेगा।