В большинстве SQL диалектов нет встроенной возможности для выполнения рекурсивных запросов напрямую. Однако в некоторых из них, таких как PostgreSQL или SQL Server, есть соответствующие операторы.
**Для PostgreSQL** можно использовать общий табличный выражения (Common Table Expressions, CTE) с рекурсией. Запрос будет выглядеть следующим образом:
```sql
WITH RECURSIVE org_hierarchy AS (
SELECT id_org, name, parent_id
FROM org
WHERE id_org = 1
UNION ALL
SELECT o.id_org, o.name, o.parent_id
FROM org o
JOIN org_hierarchy oh ON oh.id_org = o.parent_id
)
SELECT * FROM org_hierarchy;
```
В этом запросе с помощью CTE `org_hierarchy` выбираются подразделения организации с `id_org=1`. UNION ALL обеспечивает рекурсию, объединяя исходный запрос с тем, что получилось на предыдущем шаге.
**Для SQL Server** запрос будет выглядеть аналогично, но ключевое слово RECURSIVE заменяется на ключевое слово RECURSIVE:
```sql
WITH org_hierarchy (id_org, name, parent_id) AS (
SELECT id_org, name, parent_id
FROM org
WHERE id_org = 1
UNION ALL
SELECT o.id_org, o.name, o.parent_id
FROM org o
JOIN org_hierarchy oh ON oh.id_org = o.parent_id
)
SELECT * FROM org_hierarchy;
```
Если вы использование MySQL или другую базу данных, которая не поддерживает рекурсивные запросы, то, возможно, вам придется использовать хранимую процедуру с циклом, чтобы имитировать рекурсию.