Oracle SQL - 从混乱的查询中删除重复项

时间:2016-05-12 08:34:06

标签: sql oracle duplicates

我有一个很长的复杂(至少对我而言)查询,它返回我需要的确切数据。唯一的问题是由于查询中的一个连接具有多对一关系,因此某些ID被复制。我想做的只是从查询中获取输出,并为每个唯一ID选择一行。如何从重复的ID中选择这一行并不重要,我只需要以最简单的方式将其减少到每个ID一行。

换句话说,我有一个冗长的杂乱查询,它给我提供了我需要的数据,整齐命名的列等但是重复的ID:

ID    column1  column2 column2...  column50
111    data    data    data   ...  data
111    data    data    data   ...  data
112    data    data    data   ...  data
113    data    data    data   ...  data
113    data    data    data   ...  data
113    data    data    data   ...  data

我想从查询中获取此输出并将其缩小为

ID    column1  column2 column2...  column50
111    data    data    data   ...  data
112    data    data    data   ...  data
113    data    data    data   ...  data

我遇到的挑战是我不知道如何从查询中获取整个输出并使用它(比如删除重复项)而不首先将其写入表中,我无法写到桌子上。

1 个答案:

答案 0 :(得分:2)

如果数据相同,那么最简单的方法是将您的凌乱查询包装在另一个只使用ĉ的查询中。像这样:

SELECT DISTINCT

如果不相同,则可以使用:

SELECT DISTINCT *
FROM   (
  your_messy_query
)

SELECT * FROM ( SELECT t.*, ROW_NUMBER() OVER ( PARTITION BY id ORDER BY something ) AS rn FROM ( your_messy_query ) t ) WHERE rn = 1; 可以是:

  • 如果您要检索最合适的数据,则为一组特定的列;
  • 如果您只想拍摄每组的第一行,则可以使用ORDER BY something;
  • ORDER BY ROWNUM如果您需要非确定性订单 - 但是,这通常似乎与ORDER BY NULL具有相同的效果。
相关问题