首页 > 解决方案 > 从视图 oracle 中删除重复的行

问题描述

我有一个包含一些重复数据的 oracle 视图,我试图从我的视图中删除那些重复的行:

这是我的视图代码:

 CREATE OR REPLACE FORCE VIEW "GLSID"."VW_GLSID_DOCUMENTS" ("ID", "PARENT_ID", "DOCUMENT_TYPE_ID", "AMOUNT") AS 
  SELECT  container.id,
   container.container_id AS parent_id,
   document.document_type_id,
   container.number_of_documents AS amount
   FROM container
   JOIN document ON document.container_id = container.id ;

这个视图给了我这个结果:

ID | PARENT_ID | DOCUMENT_TYPE_ID | Amount
21      23          3                2
21      23          3                2
21      23          3                1
15      26          3                4

有人可以帮助我如何从这个视图中删除重复的行来得到这个:

ID | PARENT_ID | DOCUMENT_TYPE_ID | Amount
21      23          3                2
21      23          3                1
15      26          3                4

提前致谢

标签: sqloracleplsql

解决方案


根据返回的结果,最简单的方法是在 SELECT 中使用 DISTINCT:

 CREATE OR REPLACE FORCE VIEW "GLSID"."VW_GLSID_DOCUMENTS" ("ID", "PARENT_ID", "DOCUMENT_TYPE_ID", "AMOUNT") AS 
  SELECT DISTINCT container.id,
   container.container_id AS parent_id,
   document.document_type_id,
   container.number_of_documents AS amount
   FROM container
   JOIN document ON document.container_id = container.id ;

如果您在文档计数中发现错误,您可以尝试以下方法:

 CREATE OR REPLACE FORCE VIEW "GLSID"."VW_GLSID_DOCUMENTS" ("ID", "PARENT_ID", "DOCUMENT_TYPE_ID", "AMOUNT") AS 
  SELECT container.id,
         container.container_id AS parent_id,
         document.document_type_id,
         SUM(container.number_of_documents) AS amount
   FROM container
   JOIN document ON document.container_id = container.id 
   GROUP BY container.id,
            container.container_id,
            document.document_type_id

推荐阅读