我有两个像这样的数据库:
| idElement | idClient | idSubClient | idSport | idCategory | idTeam | idParent |
|-----------|----------|-------------|---------|------------|--------|----------|
| 1 | 1 | -1 | (null) | (null) | (null) | (null) |
| 2 | 1 | -1 | 30 | (null) | (null) | 1 |
| 3 | 1 | -1 | (null) | 100 | (null) | 2 |
| 4 | 1 | -1 | 31 | (null) | (null) | 1 |
| 5 | 1 | -1 | (null) | (null) | 150 | 3 |
| 6 | 1 | -1 | (null) | (null) | 151 | 3 |
| 7 | 1 | -1 | (null) | 101 | (null) | 4 |
| 8 | 1 | -1 | (null) | 101 | (null) | 2 |
| 9 | 1 | -1 | (null) | (null) | 152 | 7 |
| 10 | 1 | -1 | (null) | (null) | 153 | 7 || idRef | idElement | idUser |
|-------|-----------|--------|
| 1 | 1 | 2000 |
| 2 | 1 | 2001 |
| 3 | 1 | 2002 |
| 4 | 1 | 2003 |
| 5 | 2 | 2004 |
| 6 | 2 | 2005 |
| 7 | 3 | 2001 |
| 8 | 4 | 2003 |
| 9 | 9 | 2004 |我希望使用idUser、idClient、idSubclient创建反向递归查询,如果元素的父元素是运动的,则返回该查询。
例如,:
在我的例子中,id 2004的用户被分配给2元素,即运动元素,但也被分配给元素9。id 9的元素是一个与id 7挂在类别上的团队,在这种情况下它不是一项运动,所以我需要咨询他的父母来检查是否是体育.
我所期望的
( idElement )\x{e76f}\x{e76f}\x
SQLFiddle实例
发布于 2020-05-07 15:23:51
在MariaDB 10.4中,可以使用递归CTE查找所需的行。例如:
with recursive
u as (
select
u.idUser, u.idElement as root,
o.idElement, o.idParent, o.idSport, 1 as lvl from organigram_users u
join organigram o on o.idElement = u.idElement
where u.idUser = 2004
UNION ALL
select u.idUser, u.root, o.idElement, o.idParent, o.idSport, u.lvl + 1
from u
join organigram o on o.idElement = u.idParent and u.idSport is null
),
s as (
select *
from (
select *,
row_number() over(partition by idUser, root order by lvl desc) as rn
from u
) x
where rn = 1
)
select * from s; -- idElement shows 2, 4结果:
idUser root idElement idParent idSport lvl rn
------ ---- --------- -------- ------- --- --
2004 2 2 1 30 1 1
2004 9 4 1 31 3 1列idElement显示具有非空idSport值的最大父级:一个在第一级,另一个在第三级。
请参见在db<>fiddle上运行示例。
发布于 2020-05-07 13:09:48
这是我解决我所理解的问题的方法。若要检查用户的父级是否具有运动性质,请执行以下操作:
如有疑问或进一步讨论,请select if(o.idSport>0,'TRUE','FALSE') as isSport,o.idElement, o.idParent,u.idUser from organigram o join organigram_users u on (u.idElement = o.idElement) where u.idUser = 2004;评论。
https://stackoverflow.com/questions/61658150
复制相似问题