Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 我的sql workbench过程未能返回结果_Mysql_Stored Procedures_Workbench - Fatal编程技术网

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')。请注意参数中的单引号。尝试删除所有下划线。