LEFT JOIN关联后Surname字段未填充问题排查求助
问题排查:SQL LEFT JOIN后Surname字段未填充
涉及表:供应商表、申请人表、预期结果表
当前使用的SQL代码:
SELECT T2."Fullname",T2."Town", T2."Age", T1."Surname" FROM "Requestor" as T2 LEFT JOIN "Supplier" as T1 ON (T2."Fullname" LIKE '%' + T1."Name" + '%') ORDER BY T2."Fullname" ;
排查方向:
- 字符串拼接语法不兼容:不同数据库对字符串拼接的语法要求不同,比如PostgreSQL用
||而非+,MySQL需要用CONCAT('%', T1."Name", '%')。如果你的数据库不支持+做字符串连接,拼接后的条件会失效,导致没有匹配记录,Surname字段自然为NULL。建议改用通用的CONCAT函数写法:ON (T2."Fullname" LIKE CONCAT('%', T1."Name", '%')) - 大小写不匹配:LIKE匹配默认区分大小写,如果
Fullname和Name大小写不一致(比如Fullname是"Mary Smith",Name是"mary"),会导致匹配失败。可以统一转换为小写或大写后再匹配:ON (LOWER(T2."Fullname") LIKE CONCAT('%', LOWER(T1."Name"), '%')) - 匹配逻辑不符合预期:确认
Fullname字段确实包含Name字段的内容,比如是否存在Fullname是全名但Name是姓氏的情况?如果实际需要的是姓氏匹配而非包含逻辑,当前的LIKE条件就不对,需要调整匹配规则。 - LEFT JOIN特性限制:如果存在无对应供应商的申请人,LEFT JOIN会保留这些记录并将Surname填充为NULL。如果预期结果中所有记录都要有Surname,应该改用
INNER JOIN,只保留能匹配上的记录。
内容的提问来源于stack exchange,提问作者Vim
相关产品推荐
相关产品推荐

