2017-11-04 79 views
0

的價值我有一個包括許多查詢獲取前面的查詢

DELIMITER $$ 
CREATE PROCEDURE test() 

BEGIN 

    SELECT * FROM a; 
    INSERT INTO b ...;   //use result a query 
    UPDATE c ...;    //use result a query 
    INSERT INTO d ...;   //use result a query 
    SELECT * FROM d WHERE ...; //use result a query 
    INSERT INTO e ...;   //use result d query 
    UPDATE a ...;    //use result d query 

END 
$$ 

我怎樣才能從以前的查詢值的過程?

and

如何檢測它是否爲空?

回答

2

如果您一次插入一行,並且想要最近一次自動遞增的ID,則可以使用ID;

select last_insert_id() 

這記錄在here

如果他們插入多行,那麼這可能有點棘手。

如果您想從select「返回」一個值,請使用變量。 。 。 :=into

+0

我的第一個查詢選擇。然後,通過獲取last_insert_id(),可以採取另一個用戶。我不只是想要一個身份證 –

+0

你能給我一個小例子嗎? –

0

我建議你使用「臨時表」。您可以創建臨時表來存儲數據並根據該會話執行對其的查詢

因此,它可能是這樣的..

DELIMITER $$ CREATE PROCEDURE test() 

BEGIN 

CREATE TEMPORARY TABLE IF NOT EXISTS tempTable_A AS (SELECT * FROM a) 

INSERT INTO b ...;   //use result tempTable_A query 
UPDATE c ...;    //use result tempTable_A query 
INSERT INTO d ...;   //use result tempTable_A query 

CREATE TEMPORARY TABLE IF NOT EXISTS tempTable_D AS (SELECT * FROM d) //use result tempTable_A query 
INSERT INTO e ...;   //use result tempTable_D query 
UPDATE a ...;    //use result tempTable_D query 



END $$ 

的例子可以在這裏找到: Create a temporary table in a SELECT statement without a separate CREATE TABLE

文檔鏈接: https://dev.mysql.com/doc/refman/5.7/en/create-table.html