Mysql 如何内部连接存储函数的结果?

Mysql 如何内部连接存储函数的结果?,mysql,inner-join,stored-functions,Mysql,Inner Join,Stored Functions,我找了一整天都没有成功,所以我决定问 我将尽可能地简化结构以获取本质 我有以下职能: mysql> SELECT set_of_ids_to_names('1:2:3:4:5', ':') AS `res`; +-------------------------------+ | res | +-------------------------------+ | NameA:NameB:NameC:NameD:NameE | +-----

我找了一整天都没有成功,所以我决定问

我将尽可能地简化结构以获取本质

我有以下职能:

mysql> SELECT set_of_ids_to_names('1:2:3:4:5', ':') AS `res`;
+-------------------------------+
| res                           |
+-------------------------------+
| NameA:NameB:NameC:NameD:NameE |
+-------------------------------+
我有一张桌子:

mysql> SELECT * FROM `tbl_tool`;
+----+-----------------+---------+
| ID | Tool            | ID_name |
+----+-----------------+---------+
|  1 | Tool_1          | 1:2:3:4 |
|  2 | Tool_2          | 2:4:5   |
|  3 | Tool_3          | 4:5     |
|  4 | Tool_4          | 3       |
+----+-----------------+---------+
我希望实现的结果是将视图称为“v_工具”,因此,一旦我选择它,我将得到:

mysql> SELECT * FROM `v_tool`;
+----+-----------------+-------------------------+
| ID | Tool            | Name                    |
+----+-----------------+-------------------------+
|  1 | Tool_1          | NameA:NameB:NameC:NameD |
|  2 | Tool_2          | NameB:NameD:NameE       |
|  3 | Tool_3          | NameD:NameE             |
|  4 | Tool_4          | NameC                   |
+----+-----------------+-------------------------+
我尝试的是:

SELECT `tbl_tool`.`ID`, `tbl_tool`.`Tool`, `Name` FROM `tbl_tool` 
INNER JOIN (SELECT set_of_ids_to_names((SELECT `ID` FROM `tbl_tool` WHERE `ID` = `tbl_tool`.`ID`), ':') AS `Name`) AS `aaa`
我知道这是错误的,但我就是不知道如何将正确的值传递给函数“set_of_id_to_names”


非常感谢您。

查看您最初的函数调用:

SELECT set_of_ids_to_names('1:2:3:4:5', ':') AS `res`
请务必注意,函数调用出现在
SELECT
子句中,而不是出现在
FROM
子句中。 这表明
set_of_id_to_names
是一个标量函数,而不是表值函数

查询表
tbl\u工具
时,您可以执行完全相同的操作:在
SELECT
子句中调用
set\u of_id\u to_names

SELECT Tool, set_of_ids_to_names(ID_name, ':') AS Name
FROM tbl_tool

对于表值函数,情况当然不同。SQL Server有
交叉应用
为此,在MySQL中,您可能必须使用封装函数调用的子查询来连接表。

查看您所做的原始函数调用:

SELECT set_of_ids_to_names('1:2:3:4:5', ':') AS `res`
请务必注意,函数调用出现在
SELECT
子句中,而不是出现在
FROM
子句中。 这表明
set_of_id_to_names
是一个标量函数,而不是表值函数

查询表
tbl\u工具
时,您可以执行完全相同的操作:在
SELECT
子句中调用
set\u of_id\u to_names

SELECT Tool, set_of_ids_to_names(ID_name, ':') AS Name
FROM tbl_tool

对于表值函数,情况当然不同。SQL Server有
交叉应用
为此,在MySQL中,您可能必须使用封装函数调用的子查询来连接表。

您调用
的方式是将\u id\u设置为\u name
,这似乎是一个标量函数。所以,你就不能选择工具,从tbl_工具中将_of_ID设置为_names(ID_name,,:')作为名称吗!!!这让我一整天都发疯,但再简单不过了:)好吧,太好了,我担心我没抓住重点,这就是为什么我没有马上把它作为答案发布。不管怎样,我现在就这么做,因为这对将来的其他人来说似乎是一个有用的答案。您调用
set\u of_id\u to_names
的方式似乎是一个标量函数。所以,你就不能选择工具,从tbl_工具中将_of_ID设置为_names(ID_name,,:')作为名称吗!!!这让我一整天都发疯,但再简单不过了:)好吧,太好了,我担心我没抓住重点,这就是为什么我没有马上把它作为答案发布。不管怎样,我现在就这么做,因为这对将来的其他人来说似乎是一个有用的答案。