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

PostgreSQL

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

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

27.12.2016, 11:58. Просмотров 260. Ответов 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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Grossmeister
Модератор
2508 / 2176 / 319
Регистрация: 21.01.2011
Сообщений: 9,774
27.12.2016, 13:32     Поиск *родителей* не имеющих *детей* #2
Цитата Сообщение от Nikich500 Посмотреть сообщение
Искать parent_id из таблицы Child искать не получится, так как детей попросту нет
NOT IN
NOT EXISTS
Dshedoo
19 / 19 / 3
Регистрация: 27.10.2015
Сообщений: 59
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
Уф
183 / 174 / 74
Регистрация: 13.07.2015
Сообщений: 649
Завершенные тесты: 1
11.01.2017, 14:11     Поиск *родителей* не имеющих *детей* #4
кстати рекурсивное дерево не очень удобно в использовании, тебе придется постоянно его все обходить при выводе, и еще проверять нет ли замыканий, т.е. если случайно появится запись
idpar_id
12
21
то получишь замыкание и бесконечный цикл, я решил использовать вместо этого материальные пути, http://ludo.cubicphuse.nl/jquery-treetable/ да и есть удобный плагин для отображения таких таблиц, если у тебя конечно задача не академическая, а так решать конечно тебе
Yandex
Объявления
11.01.2017, 14:11     Поиск *родителей* не имеющих *детей*
Ответ Создать тему
Опции темы

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