SQL_Надо Получить связанные данные в поиске по таблице
Затрудняюсь с задачей :
Таблица представлена следующими полями:
1) key
2) id
3) phone
4) mail
Тестовые данные:
1;12345;89997776655;[email protected]
2;54321;87778885566;[email protected]
3;98765;87776664577;three@mail
4; 66678;87778885566;[email protected]
5; 34567;84547895566;[email protected]
6; 34567;89087545678;[email protected]
На основании заданного поля (это может быть id, phone, mail) получить все "связанные данные"
Например: если задать поиск по условию phone = 87778885566;
Результат должен быть следующим:
2;54321;87778885566;[email protected]
4; 66678;87778885566;[email protected]
5; 34567;84547895566;[email protected]
6; 34567;89087545678;[email protected]
НА понимание связанности вывода

Ответы (1 шт):
Автор решения: ValNik
→ Ссылка
Думаю, лучше всего использовать рекурсивный запрос, как сказал @Akina, или делать серию запросов из приложения.Главная сложность - как остановиться в цикле выборки, "горшочек не вари!"))
with recursive rq as(
select 1 n,key,id,phone,mail,cast(key as varchar) keys, 'first' as fl
from log where phone='87778885566'
group by key,id,phone,mail
union all
select n+1,b.key,b.id,b.phone,b.mail
,concat(keys,',',cast(b.key as varchar)) keys
,concat(case when b.id=a.id then 'id ' else ''end
,case when b.phone=a.phone then 'phone ' else ''end
,case when b.mail=a.mail then 'mail ' else ''end)
from rq a
inner join (select key,id,phone,mail from log group by key,id,phone,mail) b
on (
((b.id=a.id) or (b.phone=a.phone) or (b.mail=a.mail))
)
and position(cast(b.key as varchar) in a.keys)<1
)
select * from rq