sql >> データベース >  >> RDS >> Mysql

ストアドプロシージャの結果セットのフィルタリング

    これを解決するには、いくつかの方法があります。最も簡単なのは、結果セットを直接フィルタリングできるようにストアドプロシージャを変更することですが、何らかの理由でこれを実行できないと想定しています。

    次に行う必要があるのは、次のように、ストアドプロシージャの結果をテーブル/一時テーブルに格納することです。

    DECLARE @tablevar table(col1,..
    INSERT INTO @tablevar(col1,..) exec MyStoredProc 'param1', 'param2'
    
    SELECT col1, col2 FROM @tablevar WHERE col1 = 'abc'
    

    編集:サブクエリを編集できる場合:

    古いストアドプロシージャ:... SELECT * FROMMyTableWHERECol1 =@ param1 ANDCol2 =@ param2

    新しいストアドプロシージャ:

    ....
    SELECT
    *
    FROM
       (SELECT
          *
       FROM
          MyTable
       WHERE
          Col1 = @param1 AND
          Col2 = @param2
       ) a
    WHERE
       Col3 = FilterRule1
    

    しかし、ここでストアドプロシージャを完全に理解していない可能性があります。ここの一時テーブルは実際には最もパフォーマンスの高いソリューションではなく、多少面倒な場合がありますが、それがうまくいく場合はそれを使用しますが、ストアドプロシージャを次のように変更できない状況を想像するのに苦労しています一時テーブルの代わりにサブクエリを使用します。




    1. MySQLは多対多の場所を選択します

    2. MySQLREPLACE変数文字列

    3. SQLを使用してオプションのJOINを実行するにはどうすればよいですか?

    4. エラー1067(42000):「created_at」のデフォルト値が無効です