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

SQL Server fuld tekstsøgning - Opret én beregnet kolonne

du kan bruge en join til at kræve et match i både adressen og personens navn.

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

som jeg tror ville give dig de resultater, du har angivet, men dette kræver naturligvis både et navn og en adresse søgeterm for at en søgning kan returnere resultater. Du har ikke angivet hvad der sker hvis nogen bare søger på 'John', hvis du altid får både navn og adresse vil ovenstående fungere fint synes jeg.



  1. Hvad er Microsoft Access, og hvad bruger du det til?

  2. Er det fint at have flere DAO'er?

  3. Oprettelsestidspunkt for Innodb-tabeller

  4. docker.io - Docker-link mellem applikations- og databasecontainere