提问者:小点点

选择所有子级仅包含相同值而不包含其他方案的行


我正在编写一个查询来选择所有行,其中所有子行只包含相同的值,而不包含其他场景。

尝试了很多网上的例子,没有匹配。

从所有子级仅包含相同值而没有其他方案的表中选择*。必须包含至少一个要返回的子级。

  • 子级通过ID映射到父级。
  • 子值为一列,可以为int或null。假设所有子级必须包含值5,而不包含任何其他值。如果大多数子级都包含5,则将不起作用,则必须是所有子级都只有5的家长。
  • 父级可能有多个子级
  • 父级可能没有子级(在这种情况下,不包括在结果中)

家长示例:

A(id: 1), B(id: 2), C(id: 3), D(id: 4), E(id: 5).
children id mapping: AAA, BB, CCCCC, E
children values: 
A:5, A:5, A:3
B:5, B:null
C:5, C:5, C:5, C:5, C:5
E:null

那么唯一返回的父级是C,因为C的所有子级只包含5。

你会看到A不起作用,因为A的一个子代包含一个3,并且所有子代都必须是5。您会看到B没有返回,因为B的一个子项包含null而不是所有的5。


共1个答案

匿名用户

假设您的数据结构是:

parentid   childid   value

然后您可以对聚合执行您想要的操作:

select parentid
from t
group by parentid
having min(value) = max(value) and  -- all values are the  same
       min(value) = 5               -- and that value is 5

如果value可以为null并且您希望避免这种情况,则还应包括:

 count(value) = count(*)