如何内联存储功能的结果?

时间:2019-03-04 11:45:14

标签: 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 * 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'。

非常感谢您。

1 个答案:

答案 0 :(得分: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中,您可能必须使用封装函数调用的子查询将表连接起来。