0

我的语句只返回 1 行

SELECT * FROM Users WHERE UserId IN(downwardsPartnersById(292));

因为我的自定义函数“downwardsPartnersById”返回一个varchar。

结果:“292,307,308”

条件“IN”需要一个数组:('292','307','308') 但我不能使用字符串,否则它会在第一个 "," 处破坏字符串,并且只返回 UserId 292 的第一行.

我尝试使用 FIND_IN_SET 函数,但它似乎在 WHERE 中不起作用:

SELECT * FROM Users WHERE FIND_IN_SET(UserId, downwardsPartnersById(292)).
4

2 回答 2

2

IN 确实需要一个集合,而您拥有的是一个分隔字符串。理想情况下,你应该让你的函数返回一个集合,但是 MySQL 不支持表值函数。

所以另一个选择是FIND_IN_SET

SELECT * FROM Users WHERE FIND_IN_SET(UserId, downwardsPartnersById(292))

...在您的情况下应该可以正常工作。如果没有,那么:

  • 函数的返回值不是预期的

  • 或者您的表在UserId列中不包含相关数据。

于 2013-10-22T15:23:47.830 回答
0

您可以在 IN 语句中使用子查询,而不是使用存储过程来返回 ID 字符串。

SELECT * FROM Users WHERE UserId IN(SELECT ID FROM <YourTable> WHERE PartnerID=292);

或者你的存储过程正在做什么。

另一种选择是让您的存储过程返回一个列表而不是 varchar。这在这里概述:https ://stackoverflow.com/a/4207881/2543917

于 2013-10-22T14:48:59.100 回答