2014-02-06 40 views
1

我們有「公司」組成的名稱,地址,城市,國家的SQL Server 2008數據庫表,郵編和電話SQL查找可能的匹配,通過名稱和地址

用戶訪問我們的表單,提交他們的信息,我們需要確定它們是否在我們的數據庫記錄或新公司中。

示例數據

enter image description here

我寫了一個SQL存儲過程,將檢查由國家/郵編,姓名,地址,城市/電話的比賽。這4場比賽中的任何一場命中都會觸發一條記錄被退回。

然後,使用VB.NET,我打算根據匹配命中的點來分配點。例如,名稱匹配將是20分......但是州/郵編匹配可能只有5或10分。

示例SQL腳本

  1. 很明顯,我將使用參數來取代數據點,而不是硬編碼。

  2. 你會注意到我正在清理地址只是數值...而且名字是阿爾法。

    WITH 
    
    Match_StateZip as (
        select ID 
        from vwCompanies 
        where State = 'IA' and ZipCode like '25885%' 
    ), 
    Match_Name as (
        select ID 
        from vwCompanies 
        where Name like 'Best%Service%Ever%' /* Excluded Corp, Ltd, Inc, and non-alpha */ 
    ), 
    Match_Address as (
        select ID 
        from vwCompanies 
        where AddressLine1 like '%0429%9%' /* Only Numeric Portion */ 
    ), 
    Match_CityPhone as ( 
        select ID 
        from vwCompanies 
        where City like 'Fort%Lauderdale%' and MainPhone like '%658%' /* First 3 (not area code) */ 
    ) 
    
    
    select comp.ID, Name, MainPhone, AddressLine1, City, State, ZipCode, 
        m_sz.ID 'm_sz', m_n.ID 'm_n', m_a.ID 'm_a', m_cp.ID 'm_cp' 
    from vwCompanies comp 
    left join Match_StateZip m_sz on comp.ID = m_sz.ID 
    left join Match_Name m_n  on comp.ID = m_n.ID 
    left join Match_Address m_a  on comp.ID = m_a.ID 
    left join Match_CityPhone m_cp on comp.ID = m_cp.ID 
    
    where m_sz.ID != '' OR m_n.ID != '' OR m_a.ID != '' OR m_cp.ID != '' 
    

我的問題

是否有更好的方法來寫這個SQL腳本,以找到更好的匹配,和/或更準確?

回答

1

我們的程序完全相同的事情,至於用戶界面。如果用戶想要查找公司,他們可以搜索姓名,地址或電話號碼。看起來你正在用積分系統正確的方向。有點創意,這是肯定的(創意是件好事)。我的建議是,如果可能的話,添加一個「定位」下拉框到用戶界面。這就是我們的程序,您不需要添加任何複雜的邏輯。公司名稱默認爲「Locate By」選項,因此如果用戶想按名稱搜索,用戶不必選擇任何內容。當他們這樣做時,你可以想象的SP非常簡單明瞭...將用戶輸入添加到公司名稱的通配符搜索中。通過地址和電話進行定位也一樣。

當你想找到一個條目的最近鄰居時,事情變得非常瘋狂。例如,用戶輸入「Hihg Times」並且你想返回「High Times」。這就是我用過你所描述的積分系統的地方。