我有一个使用邻接模型对分层数据建模的表。
|----------|--------|--------|--------|
| 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
现在我想要标记父母,如果孩子被标记。我怎么能实现这一点?
答案 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])