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

问题描述 投票:1回答:1

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

我将尽可能简化结构以寻求本质。

我有功能:

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_tool'的视图,所以一旦我选择它,我得到:

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_ids_to_names'。

非常感谢你提前。

mysql inner-join stored-functions
1个回答
0
投票

看看你做的原始函数调用:

SELECT set_of_ids_to_names('1:2:3:4:5', ':') AS `res`

重要的是要注意函数调用出现在SELECT子句中,而不是在FROM子句中。这表明set_of_ids_to_names是一个标量函数,而不是一个表值函数。

查询表tbl_tool时,你可以做同样的事情:在set_of_ids_to_names子句中调用SELECT

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

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

© www.soinside.com 2019 - 2024. All rights reserved.