SQL-запросы к нескольким таблицам - PullRequest
1 голос
/ 21 сентября 2010

У меня нет большого опыта в SQL, поэтому я думаю, что это не глупый вопрос.

У меня есть 2 такие таблицы.

alt text

A .. G являются членами иерархии.

Теперь мое требование следующее.

Мне нужно отфильтровать членов, которые имеет статус = 0 из таблицы членов.

Но, если выбранный набор содержит дети, у которых есть родитель с статус = 0, игнорировать ребенка и выберите только родителя.

В качестве примера, в приведенном выше случае набор с 0 статусом = {B, C, D, E, F, G} Но C, D, E, F имеет статус 0 родителей. Поэтому мой результат должен быть {B, G}

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

Я добавлю еще несколько примеров, если вопрос сбивает с толку?

Ответы [ 2 ]

1 голос
/ 21 сентября 2010
select m.ID from Members m
left join Relations r on r.Child = m.Id
left join Members p on r.Parent = p.Id
where m1.Status = 0 and p.Status <> 0

Но я думаю, что будет рекурсивный запрос.

0 голосов
/ 21 сентября 2010

Да, вы можете делать то, что вам нужно, используя только SQL.

Поскольку родитель и ребенок должны иметь статус 0, чтобы рассмотреть их, позвольте мне перефразировать ваш запрос:

Вернуть всех участников со статусом 0, у которых нет родителей (ов) со статусом 0.

Существует несколько различных способов написания запроса "не существует", как указано выше. Один пример:

select *
from Members
where ID not in (
    select Child
    from Relationships r join Members m on r.Parent = m.ID
)

Все стало бы немного сложнее, если бы вы возвращали родителей независимо от статуса, но это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...