繁体   English   中英

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

[英]Oracle SQL - removing duplicates from a messy query

我有一个很长的复杂查询(至少对我来说),它返回我需要的确切数据。 唯一的问题是,由于查询中的一个联接具有多对一关系,因此某些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

我面临的挑战是,我不知道如何从查询中获取整个输出并对其进行处理(例如删除重复项),而无需先将其写入表中,而且我无法写入表。

如果数据相同,那么最简单的方法是将您的混乱查询包装在另一个仅使用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如果需要不确定的顺序);但是,这通常看起来与ORDER BY ROWNUM具有相同的效果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM