Это требует использования UNION
, что означает, что у вас не может быть Doctrine -совместимого решения.
Основная методология будет такой же, как и то, что вы делаете на уровне приложения, за исключением уродливее. Чтобы получить точно такое же поведение, вам нужно будет сделать что-то вроде
SELECT [text of first query]
UNION
SELECT [text of second query]
WHERE `id` NOT IN (
SELECT `id` FROM (SELECT [text of first query])
)
UNION
SELECT [text of third query]
WHERE `id` NOT IN (
SELECT `id` FROM (SELECT [text of first query])
)
AND `id` NOT IN (
SELECT (SELECT `id` FROM [text of second query])
)
Это означает, что первый запрос выполняется трижды независимо, а второй запрос выполняется дважды.