我的陈述只返回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)).
答案 0 :(得分:2)
IN
需要一个集合,你拥有的是一个分隔的字符串。理想情况下,您应该让函数返回一个集合,但MySQL不支持表值函数。
所以另一个选项是FIND_IN_SET
:
SELECT * FROM Users WHERE FIND_IN_SET(UserId, downwardsPartnersById(292))
... which should work fine in your case。如果没有,那么:
函数的返回值不是预期的
或您的表格中不包含UserId
列中的相关数据。
答案 1 :(得分:0)
您可以在IN语句中使用子查询,而不是使用存储过程返回ID字符串。
SELECT * FROM Users WHERE UserId IN(SELECT ID FROM <YourTable> WHERE PartnerID=292);
或存储过程正在进行的操作。
另一个选择是让存储过程返回列表而不是varchar。这在此概述:https://stackoverflow.com/a/4207881/2543917