Postgresql:根据邻接模型中的 child 列更新 parent 列
Postgresql: Update parent column based on child column in adjacency model
我有一个 table,它使用邻接模型对分层数据建模。
|----------|--------|--------|--------|
| ParentID | ID | Flag | Name |
|----------|--------|--------|--------|
| 0 | 1 | | x |
|----------|--------|--------|--------|
| 1 | 2 | | y |
|----------|--------|--------|--------|
| 2 | 3 | | z |
|----------|--------|--------|--------|
我有一个 SELECT 查询,如果名称与某些模式不匹配,它会设置标志。
SELECT r.id, r.pid, r.name, r.name NOT LIKE ALL(ARRAY[patterns to
match]) AS r.flag FROM TABLE1 AS r
现在,如果标记 child,我也想标记 parents。我该如何实现?
A left self join
将允许您找到 parent 字段。 BOOL_OR
可用于聚合 children 如果有多个。
SELECT r.id, r.pid, r.name,
CASE WHEN r.name NOT LIKE ALL(ARRAY[patterns to match]) THEN True ELSE
BOOL_OR(child.name NOT LIKE ALL(ARRAY[patterns to match])) END AS r.flag
FROM TABLE1 AS r
LEFT JOIN TABLE1 as child on child.pid=r.id
GROUP BY r.id, r.pid, r.name, r.name NOT LIKE ALL(ARRAY[patterns to match])
我有一个 table,它使用邻接模型对分层数据建模。
|----------|--------|--------|--------|
| ParentID | ID | Flag | Name |
|----------|--------|--------|--------|
| 0 | 1 | | x |
|----------|--------|--------|--------|
| 1 | 2 | | y |
|----------|--------|--------|--------|
| 2 | 3 | | z |
|----------|--------|--------|--------|
我有一个 SELECT 查询,如果名称与某些模式不匹配,它会设置标志。
SELECT r.id, r.pid, r.name, r.name NOT LIKE ALL(ARRAY[patterns to
match]) AS r.flag FROM TABLE1 AS r
现在,如果标记 child,我也想标记 parents。我该如何实现?
A left self join
将允许您找到 parent 字段。 BOOL_OR
可用于聚合 children 如果有多个。
SELECT r.id, r.pid, r.name,
CASE WHEN r.name NOT LIKE ALL(ARRAY[patterns to match]) THEN True ELSE
BOOL_OR(child.name NOT LIKE ALL(ARRAY[patterns to match])) END AS r.flag
FROM TABLE1 AS r
LEFT JOIN TABLE1 as child on child.pid=r.id
GROUP BY r.id, r.pid, r.name, r.name NOT LIKE ALL(ARRAY[patterns to match])