Форум программистов, компьютерный форум CyberForum.ru

PostgreSQL

Войти
Регистрация
Восстановить пароль
 
Nikich500
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 45
#1

Поиск *родителей* не имеющих *детей* - PostgreSQL

27.12.2016, 11:58. Просмотров 285. Ответов 3
Метки нет (Все метки)

Есть такая задача.. Не могу понять как найти такую запись в таблице A, имеющей связь с таблицей B, но при этом для этой записи в таблице А не было связанной записи из таблицы B.

Если переложить это на простой язык:
Допустим, есть две таблицы - Parent и Child (родители и дети)
Parent:
idparent_id
1 
10 
2010
2 
5 
255
id - идентификатор родителя
parent_id - идентификатор родителя этого родителя, если он имеется
Child:
idparent_idold_parent_id
1002 
101255
id - идентификатор ребенка
parent_id - идентификатор родителя
old_parent_id - идентификатор родителя этого родителя, если такой имеется

Связаны эти таблицы так, что ребенок связан с родителем по идентификатору родителя и, возможно, по идентификатору родителя этого родителя(то-есть родитель у ребенка есть всегда, а вот *дедушки* может и не быть в таблице).
А вот родители в таблице Parent не имеют идентификаторов детей, которые имеют связь с ними в таблице Child.

Задача состоит в нахождении первичных родителей из таблицы Parent (первичных, потому что, если родитель имеет *дедушку*, то в этом случае берем *дедушку*), у которого нет ребенка в таблице Child. Сколько угодно дедушек быть не может, то-есть если родитель имеет дедушку, то дедушка уже не может иметь своего дедушку
Например, по примерам выше, такими родителями должны были бы оказаться идентификаторы 1 и 10, так как они не имеют ни одного ребенка, который был бы связан с ними в таблице child

Есть у кого-нибудь мысли как произвести такой поиск? Искать parent_id из таблицы Child искать не получится, так как детей попросту нет, которые могли бы связаться с родителем.. Тогда как взрослый без ребенка существовать может.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2016, 11:58     Поиск *родителей* не имеющих *детей*
Посмотрите здесь:
Генеалогическое древо. Паспортные данные членов некоторого родового клана; ссылки на детей (или на родителей). Поиск всех потомков или всех предков дл Turbo Pascal
Как получать отдельно выделенных родителей и детей C# WPF
Детей и родителей в России станут разлучать в обычных семьях?
Клуб Дино - социальная сеть для детей и их родителей
Удалить из списка родителей не имеющих дочерних элементов C# .NET 4.x
Найти все отцов, имеющих больше 3 детей Prolog
Найти всех матерей, имеющих менее трех детей Prolog
Free Pascal Определить фамилии женатых (замужних) людей, имеющих детей
Найти всех матерей, имеющих менее трех детей Prolog
Turbo Pascal Определить фамилии женатых (замужних) людей, имеющих детей
Turbo Pascal Записи: определить фамилии женатых людей, имеющих детей

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Grossmeister
Модератор
3126 / 2218 / 335
Регистрация: 21.01.2011
Сообщений: 9,936
27.12.2016, 13:32     Поиск *родителей* не имеющих *детей* #2
Цитата Сообщение от Nikich500 Посмотреть сообщение
Искать parent_id из таблицы Child искать не получится, так как детей попросту нет
NOT IN
NOT EXISTS
Dshedoo
26 / 26 / 5
Регистрация: 27.10.2015
Сообщений: 76
11.01.2017, 13:05     Поиск *родителей* не имеющих *детей* #3
Нужно вернуть ID из Parent'a, у которых нет Child'ов?
SQL
1
2
3
SELECT id 
FROM paretn p LEFT JOIN child c ON p.id=c.parent_id OR p.id=c.old_parent_id
WHERE p.parent_id IS NULL AND c.id IS NULL
Уф
291 / 282 / 121
Регистрация: 13.07.2015
Сообщений: 956
Завершенные тесты: 1
11.01.2017, 14:11     Поиск *родителей* не имеющих *детей* #4
кстати рекурсивное дерево не очень удобно в использовании, тебе придется постоянно его все обходить при выводе, и еще проверять нет ли замыканий, т.е. если случайно появится запись
idpar_id
12
21
то получишь замыкание и бесконечный цикл, я решил использовать вместо этого материальные пути, http://ludo.cubicphuse.nl/jquery-treetable/ да и есть удобный плагин для отображения таких таблиц, если у тебя конечно задача не академическая, а так решать конечно тебе
Yandex
Объявления
11.01.2017, 14:11     Поиск *родителей* не имеющих *детей*
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru