#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть эта таблица категорий
|catId |catName|catParentID|catType|
-------------------------------------
|1 |cat1 |null |6 |
|2 |cat2 |null |9 |
|3 |cat3 |1 |6 |
|4 |cat4 |2 |9 |
|5 |cat5 |1 |6 |
|6 |cat6 |3 |8 |
родительские элементы находятся в одной таблице с подкатегориями, только у них нет родительского элемента.
мне нужно получить все подкатегории, тип которых для их родительского типа равен 6.
вывод приведенного выше примера должен выглядеть следующим образом-
cat3
cat5
Комментарии:
1. #6 также должен быть возвращен на основе вашего описания проблемы.
Ответ №1:
Учитывая вашу структуру данных, это, похоже, работает:
select c.*
from categories c
where c.catParentID is not null and -- has a parent
c.catType = 6;
Однако это может быть не общим решением. Таким образом, вы можете использовать самосоединение:
select c.*
from categories c join
categories cp
on c.catParentID = cp.catID
where cp.catType = 6;
Комментарии:
1. выберите категории, для которых их родительский тип 1? что это значит?
2. ну, основываясь на моем примере, вы, похоже, правы.. но в исходной таблице есть много подкатегорий, для которых их тип catType равен null.. поэтому мне нужно взять тип у родительского..
3. каким будет результат, если catName
cat6
имеет6
catType . Выбрана эта строка или нет?
Ответ №2:
SELECT *
FROM categories
WHERE cattype = 6
AND catparentid IS NOT NULL
Ответ №3:
Самый простой способ,
SELECT * FORM categories WHERE catParentId ='1' AND catType ='6'
Комментарии:
1. Я думаю, что это правильный ответ. Вопрос и описание слишком запутаны
Ответ №4:
Попробуйте это… (На основе желаемого результата)
SELECT t1.*
FROM tablename t1
LEFT JOIN tablename t2 ON t1.catparentid = t2.catid
WHERE t2.cattype = 6
AND t2.catparentid IS NULL