With SQL only (Oracle 11g):
select x.id, x.name, listagg(t2.name || t2.site, ', ') within group (order by t2.id)
from
(
select distinct t1.id, t1.name, regexp_substr(t1.project_id, '[^:]+', 1, level) id_site
from tablel1 t1
connect by level <= regexp_count(t1.project_id, ':') + 1
) x, table22 t2
where t2.id = x.id_site
group by x.id, x.name
This gives:
1 P1 Orlando - SITE1, Arizona - SITE2, Miami - SITE3
2 P2 Orlando - SITE1
3 P3 Arizona - SITE2, Miami - SITE3