問題が発生したか、MySQLの制限が発生した可能性があります。
状況は次のとおりです。
私はSPXを持っており、1つまたは2つの引数に基づいて関連するレコードを選択しています。SPは、0、1、またはそれ以上のIDのリストを返します。そのリストを次のようなIN句で使用したいと思います。
SELECT
*
FROM
table
WHERE
id IN (spX(y));
これは私にエラーを与えます:
Syntax error or access violation: 1305 FUNCTION z.spX does not exist
エラーは少しあいまいです。アクセス違反やSP自体の存在ではなく、構文エラーであると確信しています。SPに直接電話をかけると、期待どおりの結果が得られます。
これはちょっと行き止まりのように感じます。私の予想では、SPが1行以上を返した場合ではなく、 1列以上を返した場合にMySQLがエラーをスローします(この場合、代わりにFUNCTIONを使用でき、これはすぐに機能します)。
したがって、問題は、SPの結果をIN句で使用する方法はありますか?
補足:SPを使用する代わりに、テーブルを結合し、既存のクエリに新しいwhere句を追加するだけで、同じ結果が得られることを認識しています。ただし、ここでの本当の問題は、新しい機能をアプリケーションに追加する必要があり、大量のクエリに参加する必要がないことです。代わりにSPを使用することが、抵抗を最小限に抑える方法です。