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,,:')作为名称吗!!!这让我一整天都发疯,但再简单不过了:)好吧,太好了,我担心我没抓住重点,这就是为什么我没有马上把它作为答案发布。不管怎样,我现在就这么做,因为这对将来的其他人来说似乎是一个有用的答案。