You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:15:08