SELECT DISTINCT BuildFarmJob.*
FROM BuildFarmJob
LEFT JOIN PackageBuild ON PackageBuild.build_farm_job = BuildFarmJob.id
WHERE
BuildFarmJob.builder = %s AND ( PackageBuild.id IS NULL OR PackageBuild.archive IN (
SELECT id
FROM Archive
WHERE Archive.private = FALSE
UNION
SELECT id
FROM Archive
WHERE Archive.private = TRUE AND Archive.owner IN ( SELECT DISTINCT team FROM TeamParticipation WHERE person = %s
)
)
)
ORDER BY date_finished DESC, id
JTV came up with this which is massively quicker.
SELECT DISTINCT BuildFarmJob.* build_farm_ job = BuildFarmJob.id b.builder = %s AND (
PackageBuild. id IS NULL OR
PackageBuild. archive IN (
FROM BuildFarmJob
LEFT JOIN PackageBuild ON PackageBuild.
WHERE
BuildFarmJo
SELECT id
FROM Archive
WHERE Archive.private = FALSE
UNION
SELECT id
Archive. private = TRUE AND
Archive. owner IN (
SELECT DISTINCT team
FROM TeamParticipation
WHERE person = %s
FROM Archive
WHERE
)
)
)
ORDER BY date_finished DESC, id