[英]Comparing two tables and finding partial match (SQL / Oracle)
對於這個問題,我還沒有找到答案,這似乎有些棘手(是的,我是初學者)。 我有兩個桌子。 eb_site
和eb_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.