Postgresql:根据邻接模型中的子列更新父列

时间:2018-02-02 16:06:24

标签: sql postgresql postgresql-9.3

我有一个使用邻接模型对分层数据建模的表。

|----------|--------|--------|--------| | ParentID | ID | Flag | Name | |----------|--------|--------|--------| | 0 | 1 | | x | |----------|--------|--------|--------| | 1 | 2 | | y | |----------|--------|--------|--------| | 2 | 3 | | z | |----------|--------|--------|--------| 我有一个SELECT查询,如果名称与某些模式不匹配,则设置Flag。

SELECT r.id, r.pid, r.name, r.name NOT LIKE ALL(ARRAY[patterns to
match]) AS r.flag FROM TABLE1 AS r

现在我想要标记父母,如果孩子被标记。我怎么能实现这一点?

1 个答案:

答案 0 :(得分:0)

left self join将允许您查找父字段。如果有多个孩子,可以使用BOOL_OR聚合孩子。

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])