Comment sélectionner les parents et les enfants de lignes dans SQL Server
Je veux sélectionner tous les itens liées à user_id 53 (parents et enfants) à partir du tableau suivant. Il devrait être: 1, 2, 4, 8, 9.
my_table
--------------------------------------------
id parent_id user_id sequence depth
--------------------------------------------
1 null 50 1 1
2 1 52 1.2 2
3 1 52 1.3 2
4 2 53 1.2.4 3
5 2 52 1.2.5 3
6 3 52 1.3.6 3
7 3 51 1.3.7 3
8 4 51 1.2.4.8 4
9 4 51 1.2.4.9 4
Avec CTE j'ai pu sélectionner tous les enfants ou les parents, mais je ne pouvais pas sélectionner les enfants et les parents avec une seule requête. Ci-dessous la cte je suis aide à sélectionner les enfants.
Élément et les enfants
with cte as (
select t.id, t.parent_id, t.user_id
from my_table t
where t.user_id=53
union all
select t.id, t.parent_id, t.user_id
from my_table t
inner join cte c on (c.parent_id=t.id)
)
select t.* from cte t;
Élément et les parents
with cte as (
select t.id, t.parent_id, t.user_id
from my_table t
where t.user_id=53
union all
select t.id, t.parent_id, t.user_id
from my_table t
inner join cte c on (c.id=t.parent_id)
)
select t.* from cte t;
Grâce.
Vous devez vous connecter pour publier un commentaire.
C'est très pratique que vous avez les séquences. Les parents ont une séquence correspondant à un sous-ensemble initial de la personne que vous cherchez. Le même est vrai pour les enfants, mais dans le sens inverse.
Suivantes se rapproche de ce que vous voulez:
Cependant, vous devez être prudent avec les
10
correspondant1
, par exemple. Donc, nous allons ajouter un délai supplémentaire, le cas échéant:Le problème ici est que vous voulez un récursive
SELECT
. Un SGBD n'est pas fait pour une telle requête. Mais il est bien sûr possible.Cette requête devrait vous donner chaque 1er degré.
Pour un appel récursif à SÉLECTIONNER, jetez un oeil ici: Récursive select en SQL
Solution pour votre requête ici: http://sqlfiddle.com/#!6/e1542/10/0
But it's of course possible.