Return 空递归 mysql 如果其中一项与 where 不匹配

Return empty recursive mysql if one of items not match with where

我有一个递归查询 return 所有元素直到父元素,但如果任何元素具有 active = 0,我需要它不会 return 任何结果。

组织结构图table:

idElement idClient idSubClient idSport idCategory idTeam idParent active
1 1 -1 (null) (null) (null) (null) 1
2 1 -1 30 (null) (null) 1 1
3 1 -1 (null) 100 (null) 2 0
4 1 -1 (null) (null) 120 3 1
5 1 -1 35 (null) (null) 1 1
6 1 -1 (null) 125 (null) 5 1
7 1 -1 (null) (null) 130 6 1

organigram_users table:

idRef idElement idUser active
1 4 50 1
1 7 50 1

反向查询:

with recursive elem as (
   select elem.idUser, elem.idElement as root, o.idElement, o.idParent, o.idSport, o.active
   from organigram_users elem
   join organigram o on o.idElement = elem.idElement
   where elem.idUser = 50 and o.idClient = 1 and o.idSubClient = -1
   UNION ALL
   select elem.idUser, elem.root, o.idElement, o.idParent, o.idSport, o.active
   from elem 
   join organigram o on o.idElement = elem.idParent
)
select idElement, idParent, active,idsport, root
from elem          
group by idelement

我有一个组织结构图,我可以在其中将一个用户分配给组织结构图中的多个项目。根据分配它的元素,如果“活动”列是 1 或 0,我想检查所有父元素。如果其中一个 parnet 元素具有 active = 0,那么它不会 return 任何东西。

在这种情况下,用户被分配给元素 4 和 7。查询应该只显示元素 7 的父元素,因为元素 4 的父元素是活动的 = 0

预期结果(因为第三个元素有active = 0): 1个 5个 6个 7

但结果是: 1个 2个 3个 4个 5个 6个 7

SQL Fiddle

我用 MariaDB

检查了我的递归查询 here

我想你需要的是:

with recursive elem as (
   select elem.idUser, elem.idElement as root, o.idElement, o.idParent, o.idSport, o.active
   from organigram_users elem
   join organigram o on o.idElement = elem.idElement
   where elem.idUser = 50 and o.idClient = 1 and o.idSubClient = -1
   UNION ALL
   select elem.idUser, elem.root, o.idElement, o.idParent, o.idSport, o.active
   from elem 
   join organigram o on o.idElement = elem.idParent
), elements
as (
select idElement, idParent, active,idsport, root
from elem          
group by idelement
)
select * from elements
where not exists (select 'x' from elements where active=false)