Folks,
I have a view which can be designed with eithher a sub-select in the
SELECT clause or the FROM clause. The main query data set is small
(1000 records) but the table being filtered in the sub-select is large
(110,000 records).
Under those circumstances, is there a hard-and-fast rule for which
query I should use? Most of the time, users will only look at one
record at a time from the main data set.
SELECT client_id, client_name, (SELECT count(*) FROM case_clients WHERE client_id = clients.client_id
AND case_status = 'ACT') as active_count,(SELECT count(*) FROM case_clients WHERE client_id = clients.client_id
AND case_status = 'STL') as settled_count,
FROM clients;
OR:
SELECT client_id, client_name, active_count, settled_count,
FROM clients LEFT OUTER JOIN (SELECT client_id, count(*) as active_count FROM
case_clients WHERE case_status = 'ACT' GROUP BY client_id) ac ON
ac.client_id = clients.client_id LEFT OUTER JOIN (SELECT client_id, count(*) as settled_count FROM
case_clients WHERE case_status = 'STL' GROUP BY client_id) sc ON
sc.client_id = clients.client_id;
-Josh Berkus