/* actual volunteer data from the combined list and weeds out data from temp_permissions. */
SELECT volunteers.first_name
, volunteers.last_name
, volunteers.profile_image
, volunteers.email
FROM volunteers
INNER
JOIN ( /* volunteers with both an interest in a region and have a relevant skill */
SELECT temp_skills.volunteer_id
FROM ( /* volunteers with skills that match a partner that need the skills. */
SELECT vsc.volunteer_id
FROM partner_skills_connector AS psc
INNER
JOIN volunteer_skills_connector AS vsc
ON vsc.skill_id = psc.skills_id
WHERE psc.partner_id=1
GROUP
BY vsc.volunteer_id
) AS temp_skills
INNER
JOIN ( /* volunteers with interest in a region that match a partner from that region. */
SELECT vrc.volunteer_id
FROM partners AS p
INNER
JOIN volunteer_regions_connector AS vrc
ON vrc.region_id = p.region
WHERE p.id=1
GROUP
BY vrc.volunteer_id
) AS temp_regions
ON temp_regions.volunteer_id = temp_skills.volunteer_id
GROUP
BY temp_skills.volunteer_id
) AS temp_connector
ON temp_connector.volunteer_id = volunteers.id
LEFT OUTER
JOIN ( /* volunteers that already have an association with the partner */
SELECT volunteer_id
FROM volunteer_partner_permissions
WHERE <font color='"Blue"'>partner_id = 1</font>
) AS temp_permissions
ON temp_permissions.volunteer_id = temp_connector.volunteer_id
WHERE temp_connector.volunteer_id IS NULL

i'm not sure the "weeding out" is working, because i don't understand your data, but everything above the LEFT OUTER JOIN should be working just as before

your temp permissions says "volunteers that already have an association with the partner" but you have partner <> 1 which i understand to be volunteers with a relationship to any other partner except partner 1... so i changed that