Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.misc -> Re: Gathering group info in one row
ed.prochak_at_magicinterface.com (Ed prochak) wrote in message
> Run an EXPLAIN PLAN. I'm guessing (since you didn't post your SQL)
> that you are using two sub queries when one will do. But again that is
> a WILD A** GUESS.
>
> If you cannot solve it from the EXPLAIN PLAN, then repost with your
> query source, the PLAN info, and the platform info (Orace version,
> OS).
> Then we may be able to help you.
You get what you want ... I'm simply unsure, that you like it. :-)
Ok, that forces me to use the actual table and column names. So I'll better start with a description of these:
The leading table is "DBAkte" (german abbreviation for "database case") with the primary key "aId". The group tables are "DBBeteiligte" ("database participant") with the columns "aAktenId" (foreign key referencing DBAkte), "aFilter" (group name, for example "Kläger", aka Plaintiff, and "Beklagter", aka Defendant). The columns being searched are "aName", "aVorname" (first name).
The (simplified) query is:
SELECT DBAkte.aId,
klC.aName AS nameKlaeger, klC.aVorname AS vornameKlaeger, klC.NUM AS anzahlKlaeger, beC.aName AS nameBeklagter, beC.aVorname AS vornameBeklagter, beC.NUM AS anzahlBeklagterFROM DBAkte,
(SELECT klB.NUM, klB.aName, klB.aVorname, klB.aAktenId, klB.aId FROM
(SELECT COUNT(*) OVER (PARTITION BY aAktenId) AS NUM, MIN(UPPER(aName)) OVER (PARTITION BY aAktenId) AS MINANAME, MIN(UPPER(NVL(aVorname, ' '))) OVER (PARTITION BY aAktenId, UPPER(aName)) AS MINAVORNAME, MIN(aId) OVER (PARTITION BY aAktenId, UPPER(aName), UPPER(NVL(aVorname,' '))) AS MINAID, klA.aName, klA.aVorname, klA.aAktenId, klA.aId FROM DBBeteiligte klA WHERE klA.aFilter='Klaeger') klB WHERE (klB.MINAVORNAME=UPPER(NVL(klB.aVorname, ' ')) AND klB.MINANAME=UPPER(klB.aName) AND klB.MINAID=klB.aId)) klC, (SELECT beB.NUM, beB.aName, beB.aVorname, beB.aAktenId, beB.aId FROM (SELECT COUNT(*) OVER (PARTITION BY aAktenId) AS NUM, MIN(UPPER(aName)) OVER (PARTITION BY aAktenId) AS MINANAME, MIN(UPPER(NVL(aVorname, ' '))) OVER (PARTITION BY aAktenId, UPPER(aName)) AS MINAVORNAME, MIN(aId) OVER (PARTITION BY aAktenId, UPPER(aName), UPPER(NVL(aVorname,' '))) AS MINAID, beA.aName, beA.aVorname, beA.aAktenId, beA.aId FROM DBBeteiligte beA WHERE beA.aFilter='Beklagter') beB WHERE (beB.MINAVORNAME=UPPER(NVL(beB.aVorname, ' ')) AND beB.MINANAME=UPPER(beB.aName) AND beB.MINAID=beB.aId)) beCWHERE klC.aAktenId(+)=DBAkte.aId AND beC.aAktenId(+)=DBAkte.aId
An "EXPLAIN PLAN" returns (all null columns and time stamps omitted, editions for readability):
OPERATION | OPTIONS| OBJNAME |OBJINST.|OBJTYPE| OPTIM. | ID | PID | POS SELECT | | | | | CHOOSE | 0 | | 848 HASH JOIN | OUTER | | | | | 1 | 0 | 1 HASH JOIN | OUTER | | | | | 2 | 1 | 1 INDEX | FAST | aId | |UNIQUE |ANALYZED| 3 | 2 | 1 FULL SCAN VIEW | | | 3 | | | 4 | 2 | 2 WINDOW | SORT | | | | | 5 | 4 | 1 TBL ACCESS| FULL | DBBET. | 4 | |ANALYZED| 6 | 5 | 1 VIEW | | | 6 | | | 7 | 1 | 2 WINDOW | SORT | | | | | 8 | 7 | 1 TBL ACCESS| FULL | DBBET. | 7 | |ANALYZED| 9 | 8 | 1Received on Thu Sep 23 2004 - 03:23:19 CDT
![]() |
![]() |