sql >> データベース >  >> RDS >> Sqlserver

SQL Server 全文検索 - 計算列を 1 つ作成する

    結合を使用して、住所と個人名の両方が一致することを要求できます。

    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
    

    これにより、指定した結果が得られると思いますが、明らかに、検索で結果を返すには、名前と住所の両方の検索語が必要です。誰かが単に「ジョン」を検索した場合に何が起こるかを指定していませんが、常に名前と住所の両方を取得する場合、上記はうまくいくと思います.



    1. 異なるPHPページで同じMySQL接続を使用する

    2. mysql NOTINQUERY最適化

    3. SQL Server 2008でデータをjson形式に変換する方法は?

    4. mysqliでさらに問題が発生しています。結果の数値データ