2017-08-23 16 views
0

idsのSELECTを実行するストアドプロシージャがあります(プロシージャ内にあるのは、最初にどのIDを選択するかということです)。Mysql:プロシージャの結果から値のリストを作成します。

SELECT * FROM products WHERE productID IN <resultSet>のようなプロシージャー・クエリでその結果セットを使用したいと思います。

しかし、私はどのように範囲/間隔/に手順の結果セットを取得するか分からない?その選択を実行する変数。私は何が欠けていますか?

編集は:この質問は本当にSQL server stored procedure return a tableの重複はありませんが、それだけで同じソリューションを持っている:ストアドプロシージャはないリターン何でもします。

+0

手順をmysqlのではできません結果セットを直接返します(mysqlの内部でさらに使用されますが、クライアントに返すこともできます)。その値を(一時的な)テーブルに挿入し、 'SELECT * FROM products where productID IN(thattableからのselect id)'を使うか、手続き/ idselectionのロジックを直接そのクエリに適用することができます。 'SELECT * FROM products where productID IN(maintableからIDを選択します。is_a_very_nice_product = 1)' – Solarflare

+0

これはできません。そのためのビューが必要です。 – Shadow

+0

@Solarflare:残念ながら、プロシージャは 'IF xyz THEN query1; ELSE query2; END IF'を返します。これがストアドプロシージャの理由です。 – Bowi

答えて

1

MySQLストアドプロシージャは値を返しませんが、結果を一時テーブルに格納して別のクエリで使用することはできますか?あなたのストアドプロシージャで

  1. 、結果の値を持つ一時テーブルを作成:

    create procedure your_procedure() 
    
        drop temporary table if exists _procedure_result_tmp; 
    
        -- dump the result in a temporary table 
    
        create temporary table _procedure_result_tmp 
         select id from your_table where <condition>; 
    
    end 
    
  2. をクエリで_procedure_result_tmpテーブルを使用します

    call your_procedure(); 
    select * FROM your_other_table 
        where id in (select id from _procedure_result_tmp); 
    
関連する問題