Нубский вопрос про Sql
и для кошака с catid=4 ничего не выдавать
http://en.wikipedia.org/wiki/Nested_set_model , а там скорее всего и запрос уже будет понятным.
ps
почему родитель один? и зачем в запросе тогда два кота?
для начала преобразовать таблицу в соответствии с ps
почему родитель один? и зачем в запросе тогда два кота?
select * from Cats crnt
where crnt.ParentCatId = 1
and exists (select 1 from Cats chld where chld.ParentCatId = crnt.CatId)
признак Qnty можно заменить на стерилизована или нет, что может ли она рожать чтобы ее показать
в запросе два кошачих айди ибо надо одним запросом дернуть любого кошака от парентов, которые могут рожать, айдишников может быть и больше
у меня получилось пока только следующее
select cc.* from Cats c
left join Cats cc on c.CatId=cc.ParentCatId and cc.Qnty>1
where cc.CatId is not null and c.CatId in (1,2,....)
group by c.CatId
select * from table
start with catid=1
connect by parentcatid= prior catid
and qnty!=0
че за база ?
Oracle, вестимо
Oracle, вестимоБаза домашних котов на оракле!
а вдруг потом разрастется до мировых масштабов, котики то плодятся быстро, а еще надо будет хранить фоточки, видосики каждого котэ и тд и тп.
Я прочитал формулировку, но ничего не понял.
Завхоз котов разводит.
ничего святого, студентов разводил, теперь и за котиков взялся!
Я прочитал формулировку, но ничего не понял.Я тоже. Въехал в изначальную формулировку только после того, как увидел запрос постами ниже:
select * from Cats crnt
where crnt.ParentCatId = 1
and exists (select 1 from Cats chld where chld.ParentCatId = crnt.CatId)
Иногда код читать проще.
задача следующая, есть кошак у нее есть помет, вот надо выбрать любого кошака из помета родившего и способного рожать. единственное что в запрос приезжает массив кошаков для расмотрения 1,2,4 итд вот и надо выдать любого кошака следующего в потомстве для каждого из этих айди или не выдать если скажем у кошака весь помет стерилизован или родились только мальчики.
дык, чо за база то, вроде оракловый скул и его иерархические запросы спасут отца русской котопромышленности, не?
Мускул
Я правильно понимаю что тебе для каждого поданного ID нужно выбрать ровно 1 кошака родившего и способного рожать (или 0 если таких нет)?
да верно, при этом любого
Тогда нужны детали: какой версии у тебя база? 2005, 2008, 2012?
И в каком формате приезжают IDшники для поиска.
задача следующая, есть кошак у нее есть помет, вот надо выбрать любого кошака из помета родившего и способного рожать. единственное что в запрос приезжает массив кошаков для расмотрения 1,2,4 итд вот и надо выдать любого кошака следующего в потомстве для каждого из этих айди или не выдать если скажем у кошака весь помет стерилизован или родились только мальчики.уже ж написали почти
SELECT MIN(CatId) AS CatId,
ParentCatId
FROM Cats
WRE ParentCatId IN (1, 2)
AND EXISTS (
SELECT 1 FROM Cats ChildCats WRE ChildCats.ParentCatId = Cats.CatId)
AND Qnty <> 0
GROUP BY
ParentCatId
А есть такая функция, чтобы можно было выбирать рандомного котенка, а не минимального из них?
но, я так понимаю, временная таблица для результата потребуется
SELECT CatId,
ParentCatId
FROM Cats
WRE ParentCatId IN (1, 2)
AND EXISTS (
SELECT 1 FROM Cats ChildCats WRE ChildCats.ParentCatId = Cats.CatId)
AND Qnty <> 0
GROUP BY
ParentCatId
да, точно, вспомнил такой баг в MySQL. Да, можно его для рандомности использовать. Я так понимаю, рандомность будет определяться состоянием индексов.
Ещё такой нюанс на больших объёмах джойн на саму себя будет намного быстрее работать, чем EXISTS.
надо сравнивать какие планы строятся, там же еще GROUP BY.
Оставить комментарий
bav46
табличкаCats
CatId pk
ParentCatId rk to Cats на CatId
CatName varchar
Qnty int
имеем такой резалтсет
CatId ParentCatId CatName Qnt
1 NULL 'Лиска' 3
2 1 'Анфиска' 3
3 1 'Барсик' 0
4 1 'Машка' 1
5 2 'Зайка' 1
6 2 'Тузик' 0
7 2 'Мурка' 1
8 4 'Муська' 0
9 5 'Сосиска' 0
10 7 'Уська' 0
Имеем двух родаковских кошаков с Id (1 и 2)
задача выбрать ближайший помет, который имеет следующее потомство
результирующий запрос должен выдать
2 1 'Анфиска' 3
5 2 'Зайка' 1
или
4 1 'Машка' 1
7 2 'Мурка' 1
вообщем любого кошака в потомстве у которого есть свое потомство.
как-нить попроще и поизящнее