Как найти модель, которая является не только единственным ребенком, но и двоюродным братом?

#mysql #sql #ruby-on-rails

Вопрос:

У меня есть отношения бабушки и дедушки -gt; Родитель -gt;gt; Ребенок отдельных моделей.

Я пытаюсь сделать заявление SQL, чтобы вернуть всех Детей, которые являются единственными Детьми как своих Родителей, так и любых других Родителей одного и того же Дедушки и бабушки.

Самое близкое, что я могу сделать для этого, — это следующий запрос, который не работает, но, возможно, поможет прояснить мою цель :

 SELECT   COUNT(*) AS count_all,   grandparents.id AS grandparents_id  FROM `childs`  INNER JOIN `grandparents` ON `grandparents`.`id` = `childs`.`grandparents_id`  INNER JOIN `parents` ON `parents`.`id` = `childs`.`parents_id`  GROUP BY grandparents.id  HAVING (count("parents.id") gt; 1)  

Но этот запрос, к сожалению, захватывает только некоторые правильные ответы ( в моем случае 1), а не все из них. Есть идеи, как я могу правильно выполнить этот запрос?

Комментарии:

1. Пожалуйста, добавьте несколько строк примерных данных. Мне не на 100% ясно, как выглядит используемая вами структура данных.

Ответ №1:

Я думаю, что вы можете сделать это, просто используя дочернюю таблицу, вот так:

 select c.* from childs c join (  select grandparents_id   from childs  group by grandparents_id  having count(*) = 1 ) t on t.grandparents_id = c.grandparents_id  

Кстати, форма множественного числа ребенок-это дети, а не дети. Правка: Ваша текущая компоновка таблицы не позволяет, чтобы у ребенка было более одного родителя и одного дедушки и бабушки.