Форум программистов, компьютерный форум, киберфорум
Наши страницы

PostgreSQL

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

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

27.12.2016, 11:58. Просмотров 320. Ответов 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 искать не получится, так как детей попросту нет, которые могли бы связаться с родителем.. Тогда как взрослый без ребенка существовать может.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2016, 11:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поиск *родителей* не имеющих *детей* (PostgreSQL):

Вывод из БД родителей и детей - PHP
Привет. Есть таблица такой структуры: N--|-DE-|-NAME---------------|--PARENT--| 1--|--1--|--Автомобили-------|-----0------| ...

Генеалогическое древо. Паспортные данные членов некоторого родового клана; ссылки на детей (или на родителей). Поиск всех потомков или всех предков дл - Turbo Pascal
помогите пожалуйста решить, срочно, заранее спасибо Добавлено через 2 часа 54 минуты как найти всех потомков или всех предков для...

Как получать отдельно выделенных родителей и детей - C# WPF
Форумчане как получать отдельно выделенных родителей и детей через mvvm?заранее спасибо

.NET 4.x Удалить из списка родителей не имеющих дочерних элементов - C#
есть структура класса public class object { //id элемента public int id{get;set;} //имя элемента public string name {get;set;}...

Найти все отцов, имеющих больше 3 детей - Prolog
Ребят помоги с программой. Требуется сформировать исходный список структур. Предусмотреть предикат, дополняющий этот список информацией,...

Найти всех матерей, имеющих менее трех детей - Prolog
Всем привет :) Необходимо найти всех матерей имеющих менее трех детей. Как это реализовать?

3
Grossmeister
Модератор
3209 / 2305 / 365
Регистрация: 21.01.2011
Сообщений: 10,228
27.12.2016, 13:32 #2
Цитата Сообщение от Nikich500 Посмотреть сообщение
Искать parent_id из таблицы Child искать не получится, так как детей попросту нет
NOT IN
NOT EXISTS
0
Dshedoo
31 / 31 / 9
Регистрация: 27.10.2015
Сообщений: 100
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
0
Уф
458 / 449 / 186
Регистрация: 13.07.2015
Сообщений: 1,329
Завершенные тесты: 1
11.01.2017, 14:11 #4
кстати рекурсивное дерево не очень удобно в использовании, тебе придется постоянно его все обходить при выводе, и еще проверять нет ли замыканий, т.е. если случайно появится запись
idpar_id
12
21
то получишь замыкание и бесконечный цикл, я решил использовать вместо этого материальные пути, http://ludo.cubicphuse.nl/jquery-treetable/ да и есть удобный плагин для отображения таких таблиц, если у тебя конечно задача не академическая, а так решать конечно тебе
0
11.01.2017, 14:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2017, 14:11
Привет! Вот еще темы с ответами:

Записи: определить фамилии женатых людей, имеющих детей - Turbo Pascal
известны фамилии 25 человек, их семейное положение: женат(замужем) или нет и сведения о наличии детей. определить фамилии женатых людей,...

Определить фамилии женатых (замужних) людей, имеющих детей - Delphi
ЗАДАЧА: Известны фамилии 25-ти человек, их семейное положение: женат(замужем) или нет, и сведения о наличии детей(есть или нет). Определить...

Определить фамилии женатых (замужних) людей, имеющих детей - Free Pascal
Известны фамилии 25 человек, их семейное положение: женат (замужем) или нет, и сведения о наличии детей (есть или нет). Определить фамилии...

Выполнить запрос на выборку сотрудников имеющих разнополых детей - SQL Server
Доброго времени суток, форумчане! Надеюсь на вашу помощь, т.к еще новичок. Суть проблемы: имеется 2 таблицы 1 Сотрудники: ТабНомер_...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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