SQL关联查询无结果排查:BOOKS与KEYWORDS外键关联问题
排查你的SQL无结果问题
首先,咱们先拆解你的SQL逻辑:你用了内连接(INNER JOIN,也就是默认的JOIN),这意味着只有当BOOKS和KEYWORDS里存在完全匹配的Book_Id,并且同时满足Author LIKE '%a%'和Key_Word LIKE '%a%'时,才会返回结果。没返回数据大概率是以下几种情况之一:
可能的原因及排查步骤
数据中没有同时满足两个条件的记录
先分步验证,定位问题:- 先查有没有作者名包含'a'的图书:
SELECT * FROM BOOKS WHERE Author LIKE '%a%'; - 再查有没有关键词包含'a'的记录:
SELECT * FROM KEYWORDS WHERE Key_Word LIKE '%a%'; - 最后检查这两个结果里有没有相同的
Book_Id——如果没有重叠,那你的SQL自然返回空,因为内连接要求两边都有匹配项。
- 先查有没有作者名包含'a'的图书:
大小写敏感问题
很多数据库(比如PostgreSQL默认、MySQL使用区分大小写的字符集时)是区分大小写的。如果你的作者名是Anna(大写A)、关键词是Apple(大写A),但你用%a%(小写)去匹配,就会找不到结果。可以改成不区分大小写的匹配:SELECT * FROM BOOKS JOIN KEYWORDS ON BOOKS.Book_Id = KEYWORDS.Book_Id WHERE LOWER(Author) LIKE '%a%' AND LOWER(KEYWORDS.Key_Word) LIKE '%a%';外键关联不匹配
检查BOOKS.Book_Id和KEYWORDS.Book_Id的字段类型是否一致(比如一个是整数,一个是字符串),或者数据里的KEYWORDS.Book_Id有没有对应到BOOKS里的有效ID——如果关联字段类型不匹配,内连接也会匹配不到任何结果。
额外建议
如果你实际需求是“筛选出作者名含a,或者关联关键词含a的图书”,那把AND改成OR即可,但根据你描述的“根据关键词筛选图书”,应该还是要同时满足的逻辑,所以重点还是先排查数据和大小写问题。
内容的提问来源于stack exchange,提问作者John Ronald
相关产品推荐
相关产品推荐

