我遇到了一个问题,甚至可能是 MySQL 的限制。
情况如下:
我有一个 SP X,根据 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 代替,这将立即起作用)。
所以,问题是:有没有办法在 IN 子句中使用 SP 的结果?
附带说明:我知道我可以通过简单地加入表来获得相同的结果,然后将新的 where 子句添加到现有查询中,而不是使用 SP。然而,这里真正的问题是必须将新功能添加到应用程序中,并且不必加入大量查询,而是使用 SP 是阻力最小的方式。