2013-05-26 126 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