If there is not too many start_points, you can first manually union the result of each drivingdistance in a table and then filter with minimum cost for each node :
Step 1 : create table xxx as (select seq as id, id1 as node, id2 as edge, cost, the_geom from pgr_drivingDistance ([...],node1,[...]) union select [...] from pgr_drivingDistance ([...],node2,[...]) union ...
Step 2 : select id, node, edge, min(cost) as cost, the_geom from xxx group by id, node,edge, the_geom ;
If there's too many points to do it manually, create a function that will loop on the start_node_id and that return a table for step #1. I made this one (for pgrouting 1.5), for cycling isochrones around targets (global table cibles) with limits for each target (global table sectorisation) :
create or replace function isochrones_velo_depuis () returns table (cible_node int, gid int, geom geometry, vertex_id int, edge_id int , cost float8) as $BODY$ declare node record; secteur geometry ; begin raise info 'Début du calcul...'; for node in select * from cibles order by nearest_node loop raise info 'Traitement du noeud %', node.nearest_node ; execute 'select geom from sectorisations as foo where ST_Contains (foo.geom,$1)' into secteur using node.geom ; return query execute 'SELECT ' || node.nearest_node || ' as cible_node, noeuds.noeud_id, noeuds.geom, route.vertex_id, route.edge_id, route.cost FROM noeuds join (select * from driving_distance ('' select gid as id, depuis::int4 as source, vers::int4 as target, longueur_voirie*60/vitesse1/1000::float8 as cost, longueur_voirie*60/vitesse2/1000::float8 as reverse_cost from bdtopo'',' || node.nearest_node || ', 45, true, true)) as route on noeuds.noeud_id = route.vertex_id join (select $1 as geom) as s on ST_Contains (s.geom,noeuds.geom)' using secteur ; end loop; return ; end $BODY$ Language 'plpgsql' ;
and then filter as in step #2 directly on the isochrones_velo_depuis ().