我还没有找到这个问题的答案,看起来有点棘手(是的,我是初学者)。我有两张桌子; eb_site
和eb_register
,他们都有id_glo
列连接它们。但这些字段中的值并不完全相同,数字是连接因素。一个例子:
eb_site = kplus.hs.dlsn.3074823
eb_register = kplus.hs.register.3074823-1"
我怎样才能选择那些,即列出一个列表,其中eb_register中的数字与eb_site
中的数字不同(并忽略dlsn / register之间的不匹配)。
并且eb_register
在结尾处的结尾为-1(固定的结尾处没有-1)。
感谢您的回复。
编辑:哎呀抱歉的家伙,措辞严厉,编辑了
RGDS,
Steinar
答案 0 :(得分:0)
如果数字匹配,则数字的反向匹配。下面使用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()
。
答案 1 :(得分:0)
解决方案的质量取决于可能的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