У меня есть следующий запрос, который, на мой взгляд, является допустимым, но я все время чувствую ошибку, говоря мне, что есть "набросок" на "WHERE em.p4 = ue.p3" - Неизвестный столбец 'ue.p3 'in' where clause.
Это запрос:
SELECT DISTINCT ue.p3
FROM
table1 AS ue INNER JOIN table2 AS e
ON ue.p3 = e.p3
WHERE
EXISTS(
SELECT 1 FROM (
SELECT (COUNT(*) >= 1) AS MinMutual
FROM table4 AS smm
WHERE
smm.p1 IN (
SELECT sem.p3 FROM table3 AS sem
INNER JOIN table2 AS em ON sem.p3 = em.p3
WHERE em.p4 = ue.p3 AND
sem.type = 'friends' AND em.p2 = 'normal' ) AND
smm.p5 IN (
15000,15151
)
) AS Mutual WHERE
Mutual.MinMutual = TRUE) LIMIT 11
Если я выполняю подзапрос, который находится внутри функции EXISTS, все это O.K.
ПОЖАЛУЙСТА, ПОМОГИТЕ!
Причиной ошибки является то, что при корреляции можно ссылаться только на уровень подзапроса один. Посмотрите, где указан псевдоним 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". Нет необходимости в дополнительном подзапросе, который у вас есть (что вызывало проблемы в любом случае).
AFAIK, такой коррелированный запрос в настоящее время не выполняется в mysql. Присоединитесь к производной таблице, а не к существующему.
p3
существует в таблице1?