У вас есть больше уровней запросов, чем необходимо, и перепутайте их. Попробуйте:
SELECT ...
FROM turno,
(
SELECT ...
FROM accion
WHERE accion.tipo = 4 OR accion.tipo = 5
UNION
SELECT ...
FROM accion
WHERE accion.tipo <> 4 AND accion.tipo <> 5
) AS accion
WHERE ...
Лучше:
SELECT ...
FROM turno
JOIN (
SELECT ...
FROM accion
WHERE accion.tipo = 4 OR accion.tipo = 5
UNION
SELECT ...
FROM accion
WHERE accion.tipo <> 4 AND accion.tipo <> 5
) AS accion ON <join condition>
WHERE ...
Еще лучше, упростить до:
SELECT ...
FROM turno
JOIN (
SELECT ...
FROM accion
WHERE accion.tipo = 4
OR accion.tipo = 5
OR (accion.tipo <> 4 AND accion.tipo <> 5)
) AS accion ON <join condition>
WHERE ...
Дает тот же результат, только быстрее и проще.
Условия определяют все строки (кроме a.tipo IS NULL
) в accion
. Так что в данном конкретном случае вы можете еще больше упростить:
SELECT ...
FROM turno
JOIN accion a ON a.tipo IS NOT NULL AND <join condition>
WHERE ...
Но это, вероятно, из-за чрезмерного упрощения проблемы, верно?
Этот последний пример также демонстрирует, как ключевое слово AS
является просто шумом в этом контексте.