>Now this query is run over two tables and the ab_members table
>around 302 rows. Around 1/3 of these will be where cup=kids.
>when this query is run it returns 20,700 results
That's because your ...
FROM ab_leader_board ablb, ab_members abm
calls for a cross join--it asks for every logically possible
combination of ablb and abm rows. From the rest of your query, it
appears you need something like ...
FROM ab_leader_board ablb
INNER JOIN ab_members abm USING (<name_of_joining_column>)
Also, do you really mean to sum all those ablb column values after
having already called for all ablb column values with ablb.* ?
Please have a look at the following query:
SELECT abm.mem_number, abm.first_name, abm.last_name,
abm.area_represented, abm.age, abm.sex, abm.cup,
ablb.*, ablb.jp + ablb.rc + ablb.fsmgp + ablb.gmc + ablb.saly +
ablb.nwgp + ablb.ecgp + ablb.sams + ablb.wcc + ablb.kzngp + ablb.emc +
ablb.lmgp + ablb.saff + ablb.gmgp + ablb.safy + ablb.mmw + ablb.lc +
ablb.mmc + ablb.nwmc + ablb.ncc + ablb.samp + ablb.gsc + ablb.wcmgp +
ablb.sapm + ablb.kznc + ablb.npc + ablb.smc + ablb.ecc + ablb.mgp +
ablb.samo + ablb.cofc + ablb.cs + ablb.ncmgp + ablb.fsc + ablb.ggp +
ablb.tmc + ablb.gc + ablb.yotm AS total_points FROM ab_leader_board
ablb, ab_members abm
WHERE abm.sex = 'Female' AND abm.cup = 'kids'
ORDER BY total_points DESC
Now this query is run over two tables and the ab_members table contains
around 302 rows. Around 1/3 of these will be where cup=kids. However,
when this query is run it returns 20,700 results :0 Any idea why this
is? Also, any help or pointers as to how I can optimize this query will
be much appreciated. Thank you!