MySQL:将函数输出与IN

时间:2018-09-19 18:20:08

标签: mysql

我有一个MySQL函数“ GetChildren(id)”,该函数返回以逗号分隔的ID列表,这些ID是传递给该函数的ID的子代。

我想使用该函数的输出,如下所示:

SELECT * FROM table WHERE id IN (GetChildren(36))

如果id 36有孩子id 37,38和39,那么我会把那三行取回来。

但是,发生的是我只得到第一个ID。

SQL提琴在功能上似乎有困难,但这是一个演示问题的简化示例:

CREATE TABLE test (
  `ID` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO test (ID) VALUES (1),(2),(3),(4);

DELIMITER $$

DROP FUNCTION IF EXISTS `TestFN` $$
CREATE FUNCTION `TestFN` (GivenID  VARCHAR(1024)) RETURNS varchar(1024) CHARSET latin1
DETERMINISTIC
BEGIN
  RETURN '2,3,4';
END $$
DELIMITER ;

设置后,如果我运行SELECT TestFN(1),则会按预期返回2,3,4

如果我运行SELECT ID FROM test WHERE ID IN (TestFN1),我只会返回ID为2的一行。SELECT ID FROM test WHERE ID = (TestFN1)也会发生同样的情况

有没有办法像我在ID IN (...)子句中键入ID一样使用此函数的输出?

1 个答案:

答案 0 :(得分:2)

我认为MySQL需要支持表值函数,以便您以这种方式使用其中之一。否则,IN会按预期方式运行,someInt IN (astring)将IN列表成员强制转换为int,并根据您的情况评估为ID IN (2)

但是,您可能会以与尝试使用的方式类似的方式使用FIND_IN_SET

类似FIND_IN_SET(ID, GetChildren(36)) > 0