无外键跨库双表比对:匹配称呼前缀筛选对应姓名的SQL查询方案
跨库无外键表的前缀匹配查询方案
核心逻辑
无需外键关联,直接通过前缀匹配规则关联两张表,筛选出完整姓名前缀与称呼字段完全匹配的记录。
前置说明
同实例跨库查询需要确保当前数据库账号拥有两个目标库的访问权限,查询时表名前需要拼接对应的数据库名前缀;如果是不同实例的数据库,需要先配置跨实例访问(如MySQL的FEDERATED引擎、SQL Server的链接服务器、PostgreSQL的fdw扩展)。
各数据库写法示例
假设称呼表(存储Salutation字段)位于db1库,表名为salutation_tbl;姓名表(存储Name字段)位于db2库,表名为name_tbl。
MySQL
SELECT t2.Name FROM db1.salutation_tbl t1 INNER JOIN db2.name_tbl t2 ON t2.Name LIKE CONCAT(t1.Salutation, '%');
PostgreSQL
SELECT t2.Name FROM db1.salutation_tbl t1 INNER JOIN db2.name_tbl t2 ON t2.Name LIKE t1.Salutation || '%';
SQL Server
SELECT t2.Name FROM db1.dbo.salutation_tbl t1 INNER JOIN db2.dbo.name_tbl t2 ON t2.Name LIKE t1.Salutation + '%';
优化补充
如果需要忽略大小写匹配,可以在关联条件中添加大小写转换函数,示例(MySQL):
SELECT t2.Name FROM db1.salutation_tbl t1 INNER JOIN db2.name_tbl t2 ON LOWER(t2.Name) LIKE CONCAT(LOWER(t1.Salutation), '%');
如果Salutation字段可能包含%、_等SQL通配符,需要提前做转义处理避免匹配异常。
以上写法匹配你给出的测试用例,输出结果正好是符合要求的Mr.Abc、Mr.XYZ、Mr. & Mrs. Def三条记录。
内容的提问来源于stack exchange,提问作者Rohith
相关产品推荐
相关产品推荐

