Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Ricerca full-text di SQL Server:crea una colonna calcolata

potresti usare un join per richiedere una corrispondenza sia nell'indirizzo che nel nome della persona.

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

che penso ti darebbe i risultati che hai specificato, ovviamente, tuttavia, ciò richiede sia un nome che un termine di ricerca per l'indirizzo affinché una ricerca restituisca qualsiasi risultato. Non hai specificato cosa succede se qualcuno cerca semplicemente "John", se otterrai sempre sia un nome che un indirizzo, penso che funzionerà bene.