我正在编写一个查询来选择所有行,其中所有子行只包含相同的值,而不包含其他场景。
尝试了很多网上的例子,没有匹配。
从所有子级仅包含相同值而没有其他方案的表中选择*。必须包含至少一个要返回的子级。
家长示例:
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。
假设您的数据结构是:
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(*)