Как внутреннее объединение результата хранимой функции? - PullRequest
0 голосов
/ 04 марта 2019

Я ищу весь день безуспешно, поэтому я решил спросить.

Я очень упрощу структуру, насколько это возможно, чтобы просить сущность.

У меня есть функция:

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 голосов
/ 04 марта 2019

Глядя на исходный вызов функции, который вы сделали:

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 вам, вероятно, придется присоединиться к таблице с помощью подзапроса, инкапсулирующего вызов функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...