2013-05-26 121 views
0

我需要这个转变成一个存储过程在我的SQL转换成存储过程

SELECT Movie_ID 
FROM Movie 
WHERE MovieName = 'The Matrix' 
AND Shop_ID IN (
    SELECT Shop_ID 
    FROM Shop 
    WHERE Location = 'NY') 

难道我只是写

CREATE PROCEDURE SearchQuery(
SELECT Movie_ID 
FROM Movie 
WHERE MovieName = 'The Matrix' 
AND Shop_ID IN (
    SELECT Shop_ID 
    FROM Shop 
    WHERE Location = 'NY') 

还是怎么样?最后我想打电话给movieNameStoreLocation,但我该怎么做?

程序应该告诉我,如果电影是租金的位置或不:)

+0

存储过程的结果应该是什么?它是Movie_ID吗?您标记为mysql的 – Mifeet

+0

。我建议你检查你的mysql版本,因为它有过去的问题(没有得到很好的支持) – happy

+0

结果应该告诉我,如果电影是在我选择的位置出租。 – minde

回答

1

下面的查询将返回Movie_ID如果有符合您选择和-1的记录,否则:

CREATE FUNCTION search_query(p_movie_name VARCHAR(255), p_store_location VARCHAR(255)) 
RETURNS BOOL // edit 
BEGIN 
    DECLARE result INT DEFAULT -1; 
    SELECT Movie_ID INTO result 
     FROM Movie 
     WHERE MovieName = p_movie_name AND Shop_ID IN (
      SELECT Shop_ID 
      FROM Shop 
      WHERE Location = p_location); 
    RETURN result <> -1; // edit 
END 

注意,您必须查询分隔符更改为其他的东西如果您通过PhpMyAdmin进入存储过程或使用

DELIMITER // 
CREATE FUNCTION... 

END// 
DELIMITER; 
+0

我如何使它可用或不可用? – minde

+0

我更新了答案,看到标有'// edit'的行' – Mifeet

+0

所以现在如果它不可用,它返回结果-1,如果它是? – minde

1

这是你在找什么?

DELIMITER // 
CREATE PROCEDURE yourProc(In Movie varchar(100), In Location varchar(100)) 
BEGIN 
    SELECT Movie_ID 
    FROM Movie 
    WHERE MovieName = Movie 
    AND Shop_ID IN (
    SELECT Shop_ID 
    FROM Shop 
    WHERE Location = Location) 
END// 
DELIMITER ; 

这里有一个过程的一些文档:

http://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-stored-procedures.html


编辑:要返回可用或从你的程序不可用的值,你可以改变你的查询中使用的LEFT JOIN代替IN并且添加CASE语句以返回适当的值。

像这样的东西应该工作:

SELECT CASE WHEN S.Location IS NULL THEN 'Unavailable' ELSE 'Available' END 
FROM Movie M 
    LEFT JOIN Shop S ON 
     M.Shop_Id = S.Shop_Id AND 
     S.Location = Loc 
WHERE M.MoveName = Movie 

您可能会或可能不会需要添加DISTINCT到您的查询。

+0

如果电影可用或不可用,这会返回吗? – minde

+0

@MindekMindeki - 这会返回您的确切查询。如果Movie_Id存在,则返回。如果不是,则返回NULL。如果您需要它来返回一个值,那么您可以轻松添加逻辑来执行此操作。最好的祝福。 – sgeddes

+0

如果我没有弄错,程序不会返回任何东西,因为程序永远不会返回任何东西 - 这就是函数的作用或者你需要一个输出参数。 – Mifeet