Извлечь все строки столбца на основе значения другого столбца (SQL запрос) - PullRequest
0 голосов
/ 05 марта 2020

У меня есть таблица

a | b 
----- 
1 | 3 
3 | 2 
3 | 4 
2 | 5 
3 | 6 
2 | 7

как написать sql запрос, если a = 1, тогда результат 3 2 4 5 6 7, если a = 3, то 2 4 5 6 7, если 2, то 5 7 вот мой запрос

select * 
from table
where a in (select b from table where a = 1) or a = 1

, но результат только 3 2 4 6, потому что 3 имеет 2 в столбце b, поэтому я также хочу получить 5 7 спасибо

1 Ответ

0 голосов
/ 05 марта 2020

Я подозреваю, что у вас есть иерархическая структура, где a является родителем, а b является дочерним, и что вы ищете всех потомков данного узла.

Одним из распространенных способов обхода такой структуры является иерархический запрос. В SQL Сервер:

with cte as (
    select a, b from mytable where a = @your_parameter
    union all
    select t.a, t.b from mytable t inner join cte c on t.a = c.b 
)
select * from cte

Демонстрация на БД Fiddle - когда задано 3 в качестве параметра:

 a |  b
-: | -:
 3 |  2
 3 |  4
 3 |  6
 2 |  5
 2 |  7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...