簡體   English   中英

比較兩個表並找到部分匹配項(SQL / Oracle)

[英]Comparing two tables and finding partial match (SQL / Oracle)

對於這個問題,我還沒有找到答案,這似乎有些棘手(是的,我是初學者)。 我有兩個桌子。 eb_siteeb_register ,它們都有連接它們的id_glo列。 盡管這些字段中的值並不完全相同,但數字是連接因素。 一個例子:

eb_site = kplus.hs.dlsn.3074823

eb_register = kplus.hs.register.3074823-1"

我該如何選擇它們,即列出eb_register中的數字與eb_site中的數字eb_site (並忽略dlsn / register之間的不匹配)。

並且在eb_register有-1的示例中(固定的末尾沒有-1)。

感謝您的任何答復。

編輯:哎呀,不好意思的家伙,已經編輯了

Rgds,

施泰納

如果數字匹配,則數字相反。 下面的代碼使用SQL Server語法從每個鍵中提取數字(和最后的小數點):

select *
from eb_site s join
     eb_register r
     on left(REVERSE(s.id_glo), charindex('.', reverse(s.id_glo))) =
        left(REVERSE(r.id_glo), charindex('.', reverse(r.id_glo)))

在其他數據庫中, charindex()可能需要替換為另一個函數,例如instr()location()position()

解決方案的質量將取決於可能的id_glo值和您可以使用的sql方言。 首先,嘗試

    select s.id_glo
         , r.id_glo
      from eb_site     s
inner join eb_register r on (     replace(replace(s.id_glo, 'kplus.hs.register.', ''), 'kplus.hs.dlsn.', '') <> replace(replace(r.id_glo, 'kplus.hs.register.', ''), 'kplus.hs.dlsn.', '')
                              and replace(replace(r.id_glo, 'kplus.hs.register.', ''), 'kplus.hs.dlsn.', '') not like replace(replace(s.id_glo, 'kplus.hs.register.', ''), 'kplus.hs.dlsn.', '') || '-%'
           )
         ;

該查詢假定:

  • 沒有更多與您給定的前綴不同的前綴
  • 數字補碼只會出現在eb_register記錄中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM