Mysql 我的sql workbench过程未能返回结果
我已经创建了一个电影数据库,我正在尝试编写一个程序,返回演员所演的所有电影。 我使用的表是:演员、电影和电影(演员),这些表被填充并且它们之间的连接工作正常,因为我的查询工作正常 参与者表:Mysql 我的sql workbench过程未能返回结果,mysql,stored-procedures,workbench,Mysql,Stored Procedures,Workbench,我已经创建了一个电影数据库,我正在尝试编写一个程序,返回演员所演的所有电影。 我使用的表是:演员、电影和电影(演员),这些表被填充并且它们之间的连接工作正常,因为我的查询工作正常 参与者表: | idA | nameA | | idM | movieName| | idMA | idM | idA | 电影表: | idA | nameA | | idM | movieName| | idMA | idM | idA | 电影演员表: | idA | nameA | | idM |
| idA | nameA |
| idM | movieName|
| idMA | idM | idA |
电影表:
| idA | nameA |
| idM | movieName|
| idMA | idM | idA |
电影演员表:
| idA | nameA |
| idM | movieName|
| idMA | idM | idA |
现在,程序代码为:
DROP PROCEDURE IF EXISTS actor_movies;
DELIMITER //
CREATE PROCEDURE actor_movies(_actorName varchar(45))
BEGIN
select
actors.nameA,
movies.movieName
from
actors
inner join movies_actor on
actors.idA=movies_actor.idA
inner join movies on
movies_actor.idM=movies.idM
where
actors.nameA=_actorName;
END //
DELIMITER ;
这应该会返回某个演员演过的电影,但它会返回一个空行。任何人都可以告诉我我做错了什么?谢谢你的帮助
我已经修改了代码,但是现在它只返回它找到的最后一部电影
我的代码如下:
DROP PROCEDURE IF EXISTS actor_movies;
DELIMITER //
CREATE PROCEDURE actor_movies(NameActor varchar(45))
BEGIN
set @id_actor = null;
select @id_actor := idA from actors where actors.nameA=NameActor;
select @id_FA := idF from movies_actors where idA = @id_actor;
select @movie_name := movieName from movies where idF = @id_FA;
if(@id_actor is not null) then
select @movie_name as result;
end if;
END
这是最终版本,运行正常:
drop procedure if exists movies_actor;
delimiter //
create procedure movies_actor(ActorName varchar(45))
begin
select
M.nameM as Film,
from
movies M,
actors A,
movies_actor MA
where
A.nameA = ActorName and
A.idA = MA.idA and
MA.idM = M.idM;
end //
delimiter ;
您是否在过程之外尝试过此查询?如果它在过程之外工作,则交叉检查您的语法。也许有什么不对?例如,如果我设置actors.nameA='freeman',查询工作正常…这是一个语法错误,但我不知道在参数(在_actornamevarchar(45))之前输入的地方也尝试过了…也许如果我给过程的参数是varchar,那么actors.nameA=_actornameit's not validIt是有效的。但是,actors.nameA和_actorName都是varchar(45)的,调用该过程就像调用actor_movies('Bruce')。请注意参数中的单引号。尝试删除所有下划线。