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