我整天都在搜索,但没有成功,所以我决定问。
我会尽可能简化结构以寻求本质。
我有功能:
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'。
非常感谢您。
答案 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中,您可能必须使用封装函数调用的子查询将表连接起来。