MySQL : Using a function output with IN

标签 mysql

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

我想按如下方式使用该函数的输出:

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

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

然而,发生的情况是我只获得了第一个 id。

SQL fiddle 似乎在函数方面存在困难,但这里有一个简化的示例来演示该问题:

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 一样?

最佳答案

我认为 MySQL 需要支持表值函数才能以这种方式使用它。否则,IN 的行为符合预期,someInt IN (astring) 将 IN 列表成员转换为整数,在您的情况下评估为 ID IN (2)

但是,您可以使用 FIND_IN_SET以与您正在尝试的方式类似的方式。

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

关于MySQL : Using a function output with IN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52412005/

相关文章:

mysql - 合并两个表中的列,然后与另一个表连接

mysql - 如何在一次计算中选择和过滤公式

php - 在 while 循环中获取 SUM

c# - 并行数据处理混淆了一些信息

MySQL - 将 .CSV/Excel 文件导入 MySQL

php - 使用数据库将数据形成表

mysql - 如果最后一条记录包含相同的值则更新,否则插入

MySQL 在 OS X El Capitan 10.11.3 上突然停止启动

python - Apache Spark - ModuleNotFoundError : No module named 'mysql'

PHP MySQL 文章浏览量计数不起作用