MySQL LEFT JOIN返回NULL问题:如何正确关联两张表?
解决LEFT JOIN后关联表返回全NULL的问题
你的关联逻辑本身是正确的,但返回全NULL说明关联条件没有匹配到任何数据,大概率是以下两种问题导致的:
1. 关联字段数据类型不匹配
比如authors_2.authorID是整数类型,而author_note.aaID是字符串类型,数据库跨类型比较时会出现匹配失败。
可以先查看字段类型确认:
DESCRIBE authors_2; DESCRIBE author_note;
解决方法是统一类型后再关联,比如把字符串类型的字段转成整数:
SELECT * FROM authors_2 LEFT JOIN author_note ON CAST(author_note.aaID AS UNSIGNED) = authors_2.authorID;
如果authors_2.authorID是字符串类型,则反过来转换:
SELECT * FROM authors_2 LEFT JOIN author_note ON author_note.aaID = CAST(authors_2.authorID AS CHAR);
2. 字段值存在隐形字符
看起来字段值一致,但实际包含空格、制表符等隐形字符,导致值不相等。
可以通过查看字段值的长度确认:
SELECT authorID, LENGTH(authorID) FROM authors_2; SELECT aaID, LENGTH(aaID) FROM author_note;
如果同一数值的长度不一致,说明存在隐形字符。
解决方法是用TRIM函数去掉首尾隐形字符后再关联:
SELECT * FROM authors_2 LEFT JOIN author_note ON TRIM(author_note.aaID) = TRIM(authors_2.authorID);
验证匹配关系
你也可以先执行以下查询,确认两张表中是否存在真正匹配的值:
SELECT authorID FROM authors_2 WHERE authorID IN (SELECT aaID FROM author_note);
如果返回空结果,说明确实没有匹配的数据;如果有结果,用上面的方法处理类型或隐形字符问题即可。
内容的提问来源于stack exchange,提问作者queenofbel
相关产品推荐
相关产品推荐

