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
我用 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)
我有一个递归查询 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
我用 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)