Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Pesquisa de texto completo do SQL Server - Criar uma coluna computada


você pode usar uma junção para exigir uma correspondência no endereço e no nome da pessoa.
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

que eu acho que lhe daria os resultados que você especificou, obviamente, porém, isso requer um nome e um termo de pesquisa de endereço para uma pesquisa retornar qualquer resultado. Você não especificou o que acontece se alguém apenas pesquisar por 'John', se você sempre obtiver um nome e endereço, o acima funcionará bem, eu acho.