我在MySQL中有一个函数,该函数返回由逗号分隔的整数值列表,从而形成一个字符串。
例如
MyFunction(23);
退货
---------------------- | MyFunction(23) | |--------------------| | 34,45,87,23,1 | ----------------------
这是后端(Java)所需的简单功能-但是现在,由于建议了新功能,我需要这些结果用于另一个查询,该查询可能正在使用 IN 关键字遍历这些查询,如下所示:
SELECT id, myItemId, myItemValue, myDateTime FROM items where id IN (select MAX(id) from items where myItemId=1 and myItemValue IN (select MyFunction(123)) group by myItemId);
作为单个csv元素,MyFunction(23)的结果不可迭代。如果我可以使用某些函数,例如Split(MyFunction(23))可以生成结果的函数,则以下内容将非常适合我的查询,而无需进行过多更改。
Split(MyFunction(23))
这是我期望的结果:
----------------------------- | Split(MyFunction(23)) | |---------------------------| | 34 | | 45 | | 87 | | 23 | | 1 | -----------------------------
还要注意的另一件事是MyFunction()可能返回空结果或具有单个元素(没有逗号)的结果。
我可以创建一个内置函数还是一个简单函数来获得相同的功能?
这与其他关于stackoverflow的问题不同,因为我的要求非常简单,而其他解决方案的派生将是一个过大的杀伤力。看起来类似于split()函数或一个非常简单的实现。
您可以使用FIND_IN_SET函数。例如:
SELECT FIND_IN_SET('34', '34,45,87,23,1'); -- return true SELECT FIND_IN_SET('34', '34'); -- return true SELECT FIND_IN_SET('34', ''); -- return false
在您的情况下,SQL查询将如下所示:
SELECT id, myItemId, myItemValue, myDateTime FROM items WHERE id IN (SELECT MAX(id) FROM items WHERE myItemId=1 AND FIND_IN_SET(myItemValue, MyFunction(123)) GROUP BY myItemId);