我有以下数据集:
id parentId entityId isAllowed
45 NULL 1 0
46 45 2 1
46 45 3 1
47 46 3 0
47 46 4 0
对于每个id,我想获取所有实体的值,无论是直接还是继承。所以对于每个实体:
'isAllowed'值应该是最新的孩子。
结果应该是这样的:
id entityId isAllowed
45 1 0
46 1 0
47 1 0
46 2 1
47 2 1
46 3 1
47 3 0
47 4 0
请注意,对于实体1,id的45-47具有相同的值(继承46-47)。对于实体3,45没有值(因为没有直接值而没有继承值),而46和47都有它们的直接值。
我设法使用以下查询实现'isAllowed'部分:
WITH p AS (
SELECT id,
parentId,
entityId,
isAllowed
FROM t1
WHERE parentId IS NULL
UNION ALL
SELECT t1.id,
t1.parentId,
t1.entityId,
COALESCE(t1.isAllowed, p.isAllowed)
FROM t1
INNER JOIN p ON p.id = t1.parentId)
SELECT * FROM p
知道怎么查询吗?谢谢!