【问题标题】:SQL select on parent child relation with multiple join conditions具有多个连接条件的父子关系上的 SQL 选择
【发布时间】:2012-07-25 09:34:38
【问题描述】:

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


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

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

【问题讨论】:

  • 你能解释一下你在“如果没有值为 x 的孩子存在”的情况下使用什么逻辑,结果 CHILD_ID 是 3 而不是 2NULL
  • 我在结果表中出错了,当然,父 2 的 CHILD_ID 必须为 NULL。

标签: sql oracle


【解决方案1】:

这就是诀窍:

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

【讨论】:

  • 谢谢,连接中的 AND 成功了。正在尝试将其放入 WHERE 部分。
猜你喜欢
  • 1970-01-01
  • 2020-05-21
  • 2016-03-11
  • 1970-01-01
  • 2019-09-16
  • 2018-02-12
  • 2014-04-05
  • 2013-03-16
  • 1970-01-01
相关资源
最近更新 更多