How to get a distinct count of result set of multople table joins?

From: Chris ( Val ) <chrisval_at_gmail.com>
Date: Tue, 26 Feb 2008 20:26:10 -0800 (PST)
Message-ID: <beecfc0c-597f-4b1b-8852-437ef3eca30e@p43g2000hsc.googlegroups.com>


Hi everyone,

I haven't played with SQL for a while, but the following SQL returns ~700,000 records ( a lot of duplicates ), and I used a UNION with the same query to reduce the records down to ~250,000. Is there a more efficient solution, as the UNION takes some time to run? ~3 mins.

<QUERY>
  SELECT * FROM schema.tbl_A a, schema.tbl_B b, schema.tbl_C c,

                        schema.tbl_D d, schema.tbl_E e, schema.tbl_F
f,
                        schema.tbl_G g, schema.tbl_H h, schema.tbl_I
i,
                        schema.tbl_J j, schema.tbl_K k, schema.tbl_L
l,
                        schema.tbl_M m
              WHERE  a.accountid = b.ID(+)
                AND  a.custom1id = c.ID(+)
                AND  a.custom2id = d.ID(+)
                AND  a.custom3id = e.ID
                AND  a.custom4id = f.ID(+)
                AND  a.entityid = g.ID(+)
                AND  a.icpid = h.ID(+)
                AND  a.parentid = i.ID(+)
                AND  a.periodid = j.ID(+)
                AND  a.scenarioid = k.ID(+)
                AND  a.valueid = l.ID(+)
                AND  a.viewid = m.ID(+)
                AND  d.label IN ('XXX', 'XXX')
                AND  e.label IN ('XXX', 'XXX')
                AND  f.label = 'X'
                AND  k.label = 'XXX'
                AND  l.label = 'XXX'
                AND  h.label = 'X'
                AND  m.label IN ('X', 'X');
UNION
   <rest (the same as above) snipped>
 </QUERY>

Problem - I am having some trouble getting a DISTINCT COUNT of the result set from the above. I trieed the
following, but I still get the same (non-distinct) amount returned for the count.

How do I get a count of the distinct records / result set? I tried with the UNION as above, as well as the follwoing, but still get a count which includes the duplicates.

SELECT COUNT(*) FROM
 (
  SELECT DISTINCT* FROM schema.tbl_A a, schema.tbl_B b, schema.tbl_C c,

                        schema.tbl_D d, schema.tbl_E e, schema.tbl_F
f,
                        schema.tbl_G g, schema.tbl_H h, schema.tbl_I
i,
                        schema.tbl_J j, schema.tbl_K k, schema.tbl_L
l,
                        schema.tbl_M m
              WHERE  a.accountid = b.ID(+)
                AND  a.custom1id = c.ID(+)
                AND  a.custom2id = d.ID(+)
                AND  a.custom3id = e.ID
                AND  a.custom4id = f.ID(+)
                AND  a.entityid = g.ID(+)
                AND  a.icpid = h.ID(+)
                AND  a.parentid = i.ID(+)
                AND  a.periodid = j.ID(+)
                AND  a.scenarioid = k.ID(+)
                AND  a.valueid = l.ID(+)
                AND  a.viewid = m.ID(+)
                AND  d.label IN ('XXX', 'XXX')
                AND  e.label IN ('XXX', 'XXX')
                AND  f.label = 'X'
                AND  k.label = 'XXX'
                AND  l.label = 'XXX'
                AND  h.label = 'X'
                AND  m.label IN ('X', 'X')
 );

Thanks in advance,
Chris Received on Tue Feb 26 2008 - 22:26:10 CST

Original text of this message