Как вытащить одним запросом два уровня родителей?

Для того чтобы вытащить одним запросом два уровня родителей, можно использовать конструкцию JOIN в SQL и сделать связь с таблицей самой с собой (self-join). Допустим, у нас есть таблица "employees" с полями "id", "name" и "parent_id", где "parent_id" указывает на родителя текущего сотрудника.

Для получения двух уровней родителей можно использовать следующий запрос:

SELECT e1.id AS employee_id, e1.name AS employee_name, 
       e2.id AS parent_id, e2.name AS parent_name,
       e3.id AS grandparent_id, e3.name AS grandparent_name
FROM employees e1
JOIN employees e2 ON e2.id = e1.parent_id
JOIN employees e3 ON e3.id = e2.parent_id
WHERE e1.id = <employee_id>

Здесь мы создали три псевдонима для таблицы "employees" (e1, e2, e3), чтобы отличить каждый уровень родителей. Затем мы объединяем таблицу саму с собой трижды, используя конструкцию JOIN. Второй JOIN связывает сотрудника с его родителем, а третий JOIN - родителя с его родителем, тем самым обеспечивая два уровня родителей для выбранного сотрудника.

Для получения результата необходимо указать идентификатор сотрудника вместо <employee_id> в условии WHERE.

В результате запроса будет выбрано поле "employee_id" и "employee_name" для выбранного сотрудника, а также поля "parent_id" и "parent_name" для его родителя и поля "grandparent_id" и "grandparent_name" для родителя его родителя.

Этот запрос позволяет эффективно получить два уровня родителей для выбранного сотрудника в одном запросе.