SQL执行INNER JOIN时报错varchar值转int失败及无查询结果问题求助
SQL问题排查及解决
报错原因
- 关联条件类型不匹配:你当前JOIN语句的等式两侧分别是
int类型的分类ID、varchar类型的电影名,SQL执行时会自动尝试将字符串类型的电影名转换为整数,Jurassic Park这类字符串无法转成数字,直接触发转换失败报错。 - 关联逻辑错误:电影表
tbl_movies和分类表tbl_genre是多对多关系,二者没有直接关联的字段,必须通过你创建的中间关联表tbl_movielist做桥接才能关联,直接JOIN两个表本身逻辑不成立,就算改对类型也拿不到正确结果。
修正方案
1. 调整插入顺序(解决查询无结果问题)
你之前的插入顺序错误,先插入中间表tbl_movielist的数据,再插入电影、分类的对应条目,违反外键约束,要么插入失败要么关联不上数据。请按以下顺序调整插入逻辑:
-- 先插入所有电影数据 INSERT INTO tbl_movies (movie_name) VALUES ('Jurassic Park'), ('Star Wars'), ('Blade Runner'), ('Sandlot'), ('Knives Out'), ('The Notebook'); -- 再插入所有分类数据 INSERT INTO tbl_genre (genre_name) VALUES ('Sci-Fi'), ('Thriller'), ('Horror'), ('Comedy'), ('Mystery'), ('Drama'); -- 最后插入中间关联表数据,关联ID和前面插入的自增ID对应即可 INSERT INTO tbl_movielist (MovieName, Movie_identification, Genre_identification, rating) VALUES ('Sandlot', 4, 103, 7.80), ('Knives Out', 5, 104, 7.90), ('The Notebook', 6, 105, 7.80);
2. 正确关联查询写法
要查询电影和对应分类的关联数据,通过中间表桥接即可:
SELECT m.movie_id, m.movie_name, g.genre_id, g.genre_name, ml.rating FROM tbl_movielist ml INNER JOIN tbl_movies m ON ml.Movie_identification = m.movie_id INNER JOIN tbl_genre g ON ml.Genre_identification = g.genre_id;
内容的提问来源于stack exchange,提问作者Carter Thurman
相关产品推荐
相关产品推荐

