Использование возвращаемого значения сохраненной функции Mysql в операторе IN ()

Я создал сохраненную функцию Mysql для получения всех дочерних идентификаторов по родительскому идентификатору, и она отлично работает, тип возвращаемого значения этой функции - varchar, и она возвращает дочерние идентификаторы в виде строки, разделенной запятыми, например (2 ,3 ,4 ,5 ,7 ,8 ,9).

Когда я помещаю их в оператор IN(), он приносит запись, относящуюся к первому элементу (2).

Вот запрос:

SELECT * FROM department where id in(getChildDepartment(1)) 

Примечание:1, который я ввел в параметр, является идентификатором родительского отдела.

Заранее спасибо.

IN не работает со строками, он работает со столбцами. Вы должны вернуть id строк из getChildDepartment.
revo 19.06.2018 10:31

Я сделал это, цифры, которые вы видите, - это идентификаторы

Gulmuhammad Akbari 19.06.2018 10:48
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

IN принимает не строку значений, разделенных запятыми, а список значений. Причина возврата одной строки заключается в том, что происходит неявное преобразование типа из строки в целое число, поскольку столбец id, скорее всего, имеет тип данных INTEGER.

Либо измените возвращаемые значения, либо используйте:

SELECT * FROM department WHERE FIND_IN_SET(id, REPLACE(getChildDepartment(1), ' ', ''));

Спасибо @revo, все работает.

Gulmuhammad Akbari 19.06.2018 11:02

Другие вопросы по теме