我在一个表中将人名作为主键,在另一个表中将其作为外键,除了在第二个表中,他们偶尔会被错误地记录,并带有“?”符号替换字符。我希望最终用正确的名称更新第二个表,但现在我只想选择与相应正确名称配对的错误名称列表。我想出了替换每个“?”的想法名称中包含一个“_”字符,希望它能够充当通配符,标记恰好一个缺失字符的位置,这样我就可以通过 LIKE 语句连接两个表。然而,当我运行下面的 SQL 查询时,我返回了零行(尽管我知道应该有很多行):
SELECT
T1.Name,
T2.Name
FROM
table1 T1
INNER JOIN
table2 T2
ON
T1.Name LIKE REPLACE(T2.Name, '?', '_')
WHERE
T2.NAME REGEXP '[?]';
我怀疑它将“_”符号视为字符串的一部分而不是通配符?如果是这样的话,我该怎么写才能得到正确的结果?
您应该将类似的百分比放在值之外,就像这样
select t1.Name as Name1,
t2.Name as Name2
from table1 t1
left join table2 t2 on t1.Name like '%' + replace(t2.Name, '?', '_') + '%'
另请参阅这个 dbFiddle