选择具有null和non-null属性的子对象的对象

时间:2014-02-18 18:58:11

标签: sql oracle

假设我有一个表将父对象与多个子对象链接,并且具有子对象的某些属性的列。以下面的简化示例为例:

product_id  sku_id  size_desc  color_column_that_doesnt_matter
123         456     (null)     black
123         457     (null)     red
123         458     (null)     grey
124         567     large      green
124         568     medium     green
124         569     small      green
125         678     (null)     blue
125         679     5x5        yellow

请注意,产品123和124的产品都具有尺寸描述的null或尺寸描述的值。 产品125虽然不同 - 它至少有一个具有null size_desc的sku和至少一个具有size_desc非空值的sku。

假设有很多产品,比如产品125 - 我想要它们。如何通过select ... where语句过滤此数据,以返回所有产品和所有具有size_desc的null和非null值混合的skus?

SQL风格是Oracle 11

1 个答案:

答案 0 :(得分:1)

你可以得到这样的产品:

select product_id
from table t
group by product_id
having count(*) <> count(size_desc) and count(size_desc) > 0;

您可以通过将其切换为分析函数来获取所有这些产品的详细信息:

select t.*
from (select t.*, count(*) over (partition by product) as cnt,
             count(size_desc) over (partition by product) as cnt_sizedesc
      from t
     ) t
where cnt <> cnt_sizedesc and cnt_sizedesc > 0;