Выберите родительскую запись со всеми детьми в SQL

Нижеследующее утверждение должно быть изменено

x= Symmetrie(square_matrix[4][4]);

на

x= Symmetrie(square_matrix);

square_matrix[4][4] - это всего лишь один элемент при условии индексов. Вместо этого передайте адрес.

8
задан Craig Walker 26 January 2009 в 19:36
поделиться

3 ответа

Доверие числовому приему (где количество родительско-дочерних ссылок = число детей, тот родитель связан со всеми детьми):

SELECT Parent.ParentID, COUNT(*)
FROM Parent
INNER JOIN ChildParent
    ON ChildParent.ParentID = Parent.ParentID
INNER JOIN Child
    ON ChildParent.ChildID = Child.ChildID
WHERE <ChildFilterCriteria>
GROUP BY Parent.ParentID
HAVING COUNT(*) = (
    SELECT COUNT(Child.ChildID)
    FROM Child WHERE <ChildFilterCriteria>
)
6
ответ дан 5 December 2019 в 17:42
поделиться

Вот ответ.

SQL-запрос: Моделирование "И" по нескольким строкам вместо подзапросов

И вот определенное приложение этого к этой проблеме.

SELECT * FROM Parents
WHERE ParentId in
(
  SELECT ParentId FROM ChildParent
  WHERE ChildId in
  (
    SELECT ChildId FROM Child
    WHERE ChildName in ('Charlie', 'David')
  )
  GROUP BY ParentId
  HAVING COUNT(*) = 2
)
2
ответ дан 5 December 2019 в 17:42
поделиться

(Я предполагаю, где Вы сказали "Ссылки ребенка Eve Eve", Вы имели в виду "Ссылки ребенка Eve Bob", право?)

Я думаю, что имею, это... выглядит ужасным... секрет является двойным отрицанием... то есть, всеми, для которых это верно, совпадает с не любым, для которого ложь... (хорошо, я испытываю затруднения из-за своего английского языка, но я предполагаю, что Вы понимаете то, что я имею в виду),

select * from parent

parent_id                               name
--------------------------------------- --------------------------------------------------
1                                       alice
2                                       bob

select * from child

child_id                                name
--------------------------------------- --------------------------------------------------
1                                       charlie
2                                       david
3                                       eve

select * from parent_child

parent_id                               child_id
--------------------------------------- ---------------------------------------
1                                       1
2                                       1
1                                       2
2                                       3

select * from parent p 
where not exists(
    select * from child c 
    where
        c.child_id in ( 1, 2, 3 ) and 
        not exists(
            select * from parent_child pc where
                pc.child_id = c.child_id and
                pc.parent_id = p.parent_id
        )
)

--when child list = ( 1 )
parent_id                               name
--------------------------------------- --------------------------------------------------
1                                       alice
2                                       bob

--when child list = ( 1, 2 )
parent_id                               name
--------------------------------------- --------------------------------------------------
1                                       alice

--when child list = ( 1, 2, 3 )
parent_id                               name
--------------------------------------- --------------------------------------------------

хорошо, я надеюсь, что это помогает...

2
ответ дан 5 December 2019 в 17:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: