Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server-Volltextsuche – Erstellen Sie eine berechnete Spalte

Sie könnten einen Join verwenden, um eine Übereinstimmung sowohl in der Adresse als auch im Namen der Person zu verlangen.

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

was Ihnen meiner Meinung nach die von Ihnen angegebenen Ergebnisse liefern würde. Dies erfordert jedoch offensichtlich sowohl einen Namen als auch einen Adresssuchbegriff, damit eine Suche Ergebnisse zurückgibt. Sie haben nicht angegeben, was passiert, wenn jemand nur nach „John“ sucht, wenn Sie immer sowohl einen Namen als auch eine Adresse erhalten, wird das oben genannte gut funktionieren, denke ich.