SQL选择具有多个连接条件的父子关系

时间:2012-07-25 09:34:39

标签: sql oracle

我与以下子表有父/子关系:


CHILD_ID    PARENT_ID    CHILD_VALUE
------------------------------
1           1            x
2           1            y
3           2            y

现在我想选择CHILD_VALUE所在的所有现有的不同父母:

  • child有value = x(只有1或没有)
  • 如果没有值为x的子项存在 - NULL

换句话说,如果没有孩子“匹配”该值,则显示具有“匹配”子项的所有父项或NULL。

所以结果应该是这样的:


PARENT_ID    CHILD_ID    CHILD_VALUE
------------------------------
1            1           x
2            NULL        NULL

问题是如何在这种情况下缩小连接范围。

1 个答案:

答案 0 :(得分:2)

这就是诀窍:

select distinct a.parent_id, b.child_id, b.child_value
  from test1 a
  left outer join test1 b
               on a.parent_id = b.parent_id
              and b.child_value = 'x'

另见SQL fiddle