Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wyszukiwanie pełnotekstowe programu SQL Server — Utwórz jedną kolumnę obliczeniową

możesz użyć połączenia, aby wymagać dopasowania zarówno adresu, jak i nazwiska osoby.

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

co moim zdaniem dałoby określone przez Ciebie wyniki, ale oczywiście wymaga to zarówno nazwy, jak i hasła wyszukiwania adresu, aby wyszukiwanie zwróciło jakiekolwiek wyniki. Nie określiłeś, co się stanie, jeśli ktoś po prostu wyszuka „Jan”, jeśli zawsze otrzymasz zarówno imię, jak i adres, myślę, że powyższe zadziała dobrze.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyszukaj ciąg we wszystkich tabelach, wierszach i kolumnach bazy danych

  2. Jak dostroić wydajność SQL Server, Azure SQL Database i Amazon RDS

  3. Dodaj przesunięcie strefy czasowej do wartości datetime2 w programie SQL Server (T-SQL)

  4. Rozszerzona funkcja TYPE_NAME zawierająca długość danych

  5. Jak zaktualizować wiersze o losową datę?