Общие > Базы данных
MySql Query с parent_id
Enemy:
Здравствуйте.
Не могу написать один запрос и решил наконец спросить у вас.
Таблица:
-------------------------------------------------------------------
| ID | PARENT_ID | FLAG |
| 1 | 0 | 0 |
| 2 | 1 | 0 |
| 3 | 1 | cat |
| 4 | 0 | 0 |
| 5 | 0 | 0 |
| 6 | 5 | 0 |
| 7 | 0 | cat |
-------------------------------------------------------------------
Задача: Надо выбрать все записи в которых parent record (parent_id=0) и все соответстующие ему child records имееют flag != "cat"
Тоесть в данном примере в результате будет получено только три записи с ID: 4,5,6.
Большое спасибо за любые идеи.
DartSidius:
и как это будет получена запись №6...в ней парент ид = 5
стандартными средствами не реализуешь такого рода запрос...если я тебя правильно понял.......Должны искаться Parent_id=0 потом искаться зависимые от низ записи и просматриваться значение flag....mysql такого не могёт
Enemy:
DartSidius
record # 6 будет выбран с БД потому что он (child) и record # 5 (его parent) имеют FLAG != \'cat\'
Должен быть выход.
Altaxar:
3 уточнение:
1) насколько большая база данных?
2) возможна вложенность child в child ?
3) возможен запрос имет 2 подзапроса, но только 2 даст ответ, тоесть 1 создает временную таблицу?
если есть вложенность child в child то до какого уровня? так как если неопределенного уровня то базы данных не умеют работать рекурсивно.
Altaxar:
Вот составил запрос, только ногами не бить :-)
select c1.id from aaa p1 left Join aaa c1 on c1.parent_id=p1.id or c1.id=p1.id where p1.parent_id=0 AND p1.flag!="cat" AND (select 1 from aaa where parent_id=p1.id AND flag="cat" limit 1) is null
Навигация
Перейти к полной версии