Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर पूर्ण पाठ खोज - एक परिकलित स्तंभ बनाएँ

आप पते और व्यक्तियों के नाम दोनों में एक मैच की आवश्यकता के लिए एक जॉइन का उपयोग कर सकते हैं।

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पुनर्प्राप्ति बनाम कोई पुनर्प्राप्ति विकल्प के साथ SQL सर्वर पुनर्स्थापना डेटाबेस का अन्वेषण करें

  2. WHERE क्लॉज में वैकल्पिक तर्क

  3. भारी अनुक्रमित चाइल्ड आइटम्स के थोक सम्मिलन (एसक्यूएल सर्वर 2008)

  4. IS NULL बनाम =NULL जहाँ क्लॉज + SQL सर्वर

  5. पिछले इंट कॉलम के आधार पर एसक्यूएल अपडेट इंट कॉलम