【发布时间】:2021-06-30 18:14:09
【问题描述】:
在我的数据库中,我正在搜索这样的 ID 列表:
SELECT * from testcase where id in ('658', '659');
但是我怎样才能把它变成一个存储过程,它可以有多个 id 呢?
在这个例子中,我只有'658', '659',但这可能更多/更少。
我做了一个存储过程,但要么失败,因为我有两个或更多的 id,如果我把它变成像这样的单个字符串,'658, 659',那么它只能从 658 找到结果:
CREATE DEFINER=`edmetrics`@`%` PROCEDURE `GetCaseFromStrList`(CaseIDs varchar(300))
BEGIN
IF CaseIDs != 0 OR CaseIDs IS NOT NULL THEN
Select testcase.id, testcase.TestCaseName
From testcase
Where testcase.id in (CaseIDs);
END IF;
END
有没有办法用多个 X 数量的 id 拨打这样的电话?
CALL database.GetCaseFromStrList(658 , 659);
编辑 - 更多信息
被告知我冷看这个解决方案,但它不是 100% 我正在寻找的东西:StackOverflow Link
但我会用图片展示一个例子
当我编写这个 SQL 时:SELECT * from testcase where id in ('658', '659'); 我得到以下结果
如果我尝试在我的存储过程中使用FIND_IN_SET() 实现链接解决方案,我有这个:
CREATE DEFINER=`edmetrics`@`%` PROCEDURE `GetCaseFromStrList`(CaseIDs varchar(300))
BEGIN
SET @idCaseIDs = CaseIDs;
IF CaseIDs != 0 OR CaseIDs IS NOT NULL THEN
Select testcase.id, testcase.TestCaseName
From testcase
WHERE FIND_IN_SET(testcase.id, @idCaseIDs);
END IF;
END
但是,如果我使用包含所有 ID 的字符串,并进行如下调用:
CALL testreporting.GetCaseFromStrList('658, 659');
我得到以下结果
Table result from stored procedure
在那个结果中,我错过了 ID 659。
记住这是有两个 ID,但我可以有 X 个 ID,而不仅仅是两个。
【问题讨论】:
-
@AndrewMorton 不是,我会发布图片以更好地理解我的问题
-
尝试:WHERE FIND_IN_SET(testcase.id, CaseIDs) 或查看stackoverflow.com/questions/8149545/…
-
@BerndBuffen 阅读编辑..
标签: mysql sql stored-procedures mariadb