在sql中查找唯一的数据网格

时间:2014-08-19 18:43:27

标签: sql bigdata

我想使用sql找到唯一的数据集(想想形成唯一数据集的行组,找到并消除重复数据集)。分组将在parent_id,key_id,key_value_id上​​完成。但是,需要通过水平和垂直地考虑数据来确定唯一性。数据大小为terra字节。

例如,我在表格中有以下数据 -

parent_id   key_id  key_value_id    id     value
601         null       null         601     S
601         null       null         602     5

601         null       null         601     S
601         null       null         602     5
601         null       null         610     TYPE B

16501       16502       3           16501   -
16501       16502       3           16508   ?

601         null       null         601     S
601         null       null         602     5

16501       16502       3           16501   -
16501       16502       3           16508   3

预期结果如下 -

parent_id   key_id  key_value_id    id     value
601         null       null         601     S
601         null       null         602     5

601         null       null         601     S
601         null       null         602     5
601         null       null         610     TYPE B

16501       16502       3           16501   -
16501       16502       3           16508   ?

16501       16502       3           16501   -
16501       16502       3           16508   3

重复此数据集/网格,因此将其删除。

601         null       null         601     S
601         null       null         602     5

由于集合中的额外行 -

,因此将其视为单独的数据集
601         null       null         601     S
601         null       null         602     5
601         null       null         610     TYPE B

一种选择是使用游标,但数据的大小很大,这可能不是一个高性能的解决方案。我想知道是否有更简单的方法来做到这一点。

任何帮助/指示都将不胜感激。

1 个答案:

答案 0 :(得分:0)

SQL是基于设置的,但通常命令并不重要。如何使用MINUS运算符来比较上面的2个查询。如果你想要比这更复杂的东西,你需要提供你正在使用的查询,要求和数据库引擎的更多细节。

PS MINUS用于Oracle,我认为SQLServer使用EXCEPT