我一整天都没有成功,所以我决定问。
我将尽可能简化结构以寻求本质。
我有功能:
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'。
非常感谢你提前。
看看你做的原始函数调用:
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中,您可能必须使用封装函数调用的子查询来连接表。