Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Recherche en texte intégral SQL Server - Créer une colonne calculée

vous pouvez utiliser une jointure pour exiger une correspondance à la fois dans l'adresse et dans le nom de la personne.

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

ce qui, je pense, vous donnerait les résultats que vous avez spécifiés, bien évidemment, cela nécessite à la fois un nom et un terme de recherche d'adresse pour qu'une recherche renvoie des résultats. Vous n'avez pas précisé ce qui se passe si quelqu'un recherche simplement "John", si vous obtenez toujours à la fois un nom et une adresse, ce qui précède fonctionnera bien, je pense.