Причина ошибки заключается в том, что при корреляции вы можете ссылаться только на один слой подзапроса.Посмотрите, где определен псевдоним ue
, и посчитайте количество предложений FROM до тех пор, пока вы не достигнете следующей ссылки.
Я переписал ваш запрос как:
SELECT DISTINCT ue.p3
FROM table1 AS ue
JOIN table2 AS e ON ue.p3 = e.p3
WHERE EXISTS(SELECT 1 AS MinMutual
FROM table4 AS smm
JOIN TABLE3 sem ON sem.p3 = smm.p1
AND sem.type = 'friends'
JOIN TABLE2 em ON em.p3 = sem.p3
AND em.p3 = ue.p3
AND em.p2 = 'normal'
WHERE smm.p5 IN (15000,15151)
GROUP BY ? --needs a group by clause, in order to use HAVING
HAVING COUNT(*) >= 1)
LIMIT 11
EXISTSвозвращает true, если выполнено - он не оценивается на основании подзапроса, возвращающего «true».Нет необходимости в дополнительном подзапросе (который все равно вызывал проблемы).