Я получаю название всех великих детских идентификаторов, но я не получаю заголовков дочерних идентификаторов, пожалуйста, помогите мне получить и то, и другое
вот мой запрос:
SELECT g.title FROM object_data a,`object_reference` b,`tree` c,`object_reference` d,`tree` e,`object_reference` f,`object_data` g WHERE a.`obj_id` = b.`obj_id` AND b.`ref_id` = c.`parent` AND c.`child` = d.`ref_id` AND d.`ref_id` = e.`parent` AND e.`child` = f.`ref_id` AND f.`obj_id` = g.`obj_id`AND g.type='tst' AND a.obj_id=3217
вот пример данных: таблица object_data:
obj_id | type | title
-------+------+------
3217 |crs |it
3221 |grp |xyz
3228 |tst |test
3264 |tst |test3
таблица object_reference:
ref_id | obj_id
-------+---------
337 |3217
338 |3221
343 |3228
371 |3264
дерево стола:
tree | child | parent
-----+-------+------
1 |338 |337
2 |343 |338
3 |371 |337
вот ожидаемый результат:
title
-----
test
test3
но я получаю только test3 в результате вышеуказанного запроса






Я предполагаю, что вы ищете все названия идентификаторов, у которых нет дочерних элементов, потому что вам не интересно видеть XYZ, который является родительским элементом test. Если мое предположение верно, следующий запрос поможет получить желаемый результат.
select title from object_data c , object_reference d
where c.obj_id=d.obj_id
and d.ref_id in (select a.child from tree a, tree b
where a.child =b.parent(+)
and b.parent is null);
Результат:
ЗАГЛАВИЕ
контрольная работа
test3
Чтобы отобразить все тесты по заданному курсу (корень дерева), работает следующий запрос
with parent_child (child, parent) as
(
select child, parent from tree
union all
select t.child, parent_child.parent
from parent_child , tree t where t.parent=parent_child.child)
select c.title from parent_child a,object_data c , object_reference d
where c.obj_id=d.obj_id
and d.ref_id=a.child
and parent=337 --Provide the root id
and type='tst'; --removing this would display all the nodes of a tree, including XYZ
Не могли бы вы уточнить свои требования относительно того, почему вам нужно упомянуть или жестко запрограммировать obj_id?
да, у меня есть курсы, и в этих курсах есть группы и тесты. некоторые тесты находятся непосредственно в курсе, а некоторые тесты находятся в группах, которые находятся в рамках курса ... так что мой главный вывод - когда я пишу запрос с идентификатором курса, мне нужно пройти все тесты
Я новичок в sql, я не могу решить эту проблему должным образом, пожалуйста, помогите мне решить эту проблему
да, xyz является его дочерним элементом, а тест - дочерним элементом xyz ... над таблицами с дочерним и родительским деревом
я получаю ошибку, например, нераспознанный тип оператора (рядом с WITH)
Поскольку ваш вопрос непонятен, попробуйте следующее:
select a.title from object_data as a
inner join object_reference b on a.obj_id = b.obj_id
inner join tree as c on b.ref_id = c.child
Если это не то, что вы хотели, уточните, пожалуйста.
спасибо за резонанс. мой вопрос, когда я пишу ниже запрос SELECT g.title FROM object_data a, object_reference b, tree c, object_reference d, tree e, object_reference f, object_data g WHERE a.obj_id = b.obj_id AND b.ref_id = c.parent И c.child = d.ref_id И d.ref_id = e.parent И e.child = f.ref_id И f.obj_id = g.obj_idAND g.type = 'tst' И a.obj_id = 3217 получаю только внук (test3) не получает ребенка (test)
Вам действительно НУЖНО использовать свой запрос таким образом?
привет авани спасибо за ответ где я могу написать c.obj_id = 3217