Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: Simple Query Help....
Glenn Feiner wrote:
> Analytics!!!!
>
> select *
> from dba_synonyms
> where synonym_name in (select synonym_name
> from (select synonym_name,
> row_number() over(partition by
> synonym_name order by synonym_name, owner) RN
> from dba_synonyms t)
> where rn = 2)
> order by synonym_name, owner
>
>
> amerar_at_iwc.net wrote:
> > Hey All,
> >
> > I just need a bit of help with this query. I want to select all of the
> > duplicate synonym names in the database. However, I want to list not
> > just the synonym name, but also the owner of the synonym
> > name............
> >
> > Thanks.
A bit 'flashy' and inefficient, I think:
select *
from dba_synonyms
where synonym_name in (select synonym_name
from (select synonym_name, row_number() over(partition by synonym_name order by synonym_name, owner) RN from dba_synonyms t) where rn = 2)
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | ------------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 18562 | 2012K| | 1006 (2)| 00:00:13 | | 1 | SORT ORDER BY | | 18562 | 2012K| 4376K| 1006 (2)| 00:00:13 | |* 2 | HASH JOIN RIGHT SEMI | | 18562 | 2012K| | 535 (2)| 00:00:07 | | 3 | VIEW | VW_NSO_1 | 18562 | 453K| | 385 (2)| 00:00:05 | |* 4 | VIEW | | 18562 | 543K| | 385 (2)| 00:00:05 | |* 5 | WINDOW SORT PUSHED RANK| | 18562 | 1033K| 2488K| 385 (2)| 00:00:05 | |* 6 | HASH JOIN | | 18562 | 1033K| | 125 (4)| 00:00:02 | | 7 | TABLE ACCESS FULL | USER$ | 49 | 784 | | 2 (0)| 00:00:01 | | 8 | NESTED LOOPS | | 18562 | 743K| | 123 (4)| 00:00:02 | |* 9 | TABLE ACCESS FULL | OBJ$ | 18756 | 659K| | 120 (1)| 00:00:02 | |* 10 | INDEX UNIQUE SCAN | I_SYN1 | 1 | 5 | | 0 (0)| 00:00:01 | |* 11 | HASH JOIN | | 18562 | 1558K| | 149 (3)| 00:00:02 | | 12 | TABLE ACCESS FULL | USER$ | 49 | 784 | | 2 (0)| 00:00:01 | |* 13 | HASH JOIN | | 18562 | 1268K| | 146 (2)| 00:00:02 | | 14 | TABLE ACCESS FULL | SYN$ | 18487 | 613K| | 25 (0)| 00:00:01 | |* 15 | TABLE ACCESS FULL | OBJ$ | 18756 | 659K|| 120 (1)| 00:00:02 |
Predicate Information (identified by operation id):
2 - access("O"."NAME"="$nso_col_1") 4 - filter("RN"=2) 5 - filter(ROW_NUMBER() OVER ( PARTITION BY "O"."NAME" ORDER BY "O"."NAME","U"."NAME")<=2) 6 - access("O"."OWNER#"="U"."USER#") 9 - filter("O"."TYPE#"=5) 10 - access("O"."OBJ#"="S"."OBJ#") 11 - access("O"."OWNER#"="U"."USER#")
As compared to:
select owner, synonym_name
from dba_synonyms
where synonym_name in ( select synonym_name
from dba_synonyms group by synonym_name having count(*) > 1)order by synonym_name, owner;
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 938 | 76916 | 251 (4)| 00:00:04 | | 1 | SORT ORDER BY | | 938 | 76916 | 251 (4)| 00:00:04 | | 2 | NESTED LOOPS | | 938 | 76916 | 250 (4)| 00:00:04 | |* 3 | HASH JOIN | | 938 | 72226 | 250 (4)| 00:00:04 | | 4 | TABLE ACCESS FULL | USER$ | 49 | 784 | 2 (0)| 00:00:01 | |* 5 | HASH JOIN RIGHT SEMI | | 938 | 57218 | 248 (4)| 00:00:03 | | 6 | VIEW | VW_NSO_1 | 793 | 19825 | 127 (5)| 00:00:02 | |* 7 | FILTER | | | | | | | 8 | HASH GROUP BY | | 793 | 34892 | 127 (5)| 00:00:02 | |* 9 | HASH JOIN | | 18562 | 797K| 125 (4)| 00:00:02 | | 10 | TABLE ACCESS FULL | USER$ | 49 | 147 | 2 (0)| 00:00:01 | | 11 | NESTED LOOPS | | 18562 | 743K| 123 (4)| 00:00:02 | |* 12 | TABLE ACCESS FULL| OBJ$ | 18756 | 659K| 120 (1)| 00:00:02 | |* 13 | INDEX UNIQUE SCAN| I_SYN1 | 1 | 5 | 0 (0)| 00:00:01 | |* 14 | TABLE ACCESS FULL | OBJ$ | 18756 | 659K| 120 (1)| 00:00:02 | |* 15 | INDEX UNIQUE SCAN | I_SYN1 | 1 | 5 | 0(0)| 00:00:01 |
Predicate Information (identified by operation id):
3 - access("O"."OWNER#"="U"."USER#") 5 - access("O"."NAME"="$nso_col_1") 7 - filter(COUNT(*)>1) 9 - access("O"."OWNER#"="U"."USER#") 12 - filter("O"."TYPE#"=5) 13 - access("O"."OBJ#"="S"."OBJ#") 14 - filter("O"."TYPE#"=5) 15 - access("O"."OBJ#"="S"."OBJ#")
Or this:
with dup_syns as (select synonym_name
from dba_synonyms group by synonym_name having count(*) > 1)
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | ------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1087 | 145K| | 510 (3)| 00:00:07 | |* 1 | FILTER | | | | | | | | 2 | SORT GROUP BY | | 1087 | 145K| 3272K| 510 (3)| 00:00:07 | |* 3 | HASH JOIN | | 21725 | 2906K| | 252 (4)| 00:00:04 | | 4 | TABLE ACCESS FULL | USER$ | 49 | 147 | | 2 (0)| 00:00:01 | | 5 | NESTED LOOPS | | 21725 | 2842K| | 249 (4)| 00:00:03 | |* 6 | HASH JOIN | | 21951 | 2765K| | 246 (3)| 00:00:03 | |* 7 | TABLE ACCESS FULL | OBJ$ | 18756 | 659K| | 120 (1)| 00:00:02 | |* 8 | HASH JOIN | | 18562 | 1685K| | 125 (4)| 00:00:02 | | 9 | TABLE ACCESS FULL | USER$ | 49 | 1372 | | 2 (0)| 00:00:01 | | 10 | NESTED LOOPS | | 18562 | 1178K| | 123 (4)| 00:00:02 | |* 11 | TABLE ACCESS FULL| OBJ$ | 18756 | 879K| | 120 (1)| 00:00:02 | |* 12 | INDEX UNIQUE SCAN| I_SYN1 | 1 | 17 | | 0 (0)| 00:00:01 | |* 13 | INDEX UNIQUE SCAN | I_SYN1 | 1 | 5 | |0 (0)| 00:00:01 |
Predicate Information (identified by operation id):
1 - filter(COUNT(*)>1) 3 - access("O"."OWNER#"="U"."USER#") 6 - access("O"."NAME"="O"."NAME") 7 - filter("O"."TYPE#"=5) 8 - access("O"."OWNER#"="U"."USER#") 11 - filter("O"."TYPE#"=5) 12 - access("O"."OBJ#"="S"."OBJ#") 13 - access("O"."OBJ#"="S"."OBJ#")
But it is nice to know you can overcomplicate a problem.
David Fitzjarrell Received on Tue Oct 10 2006 - 15:41:35 CDT