Неверный SQL-запрос

0

У меня есть следующий запрос, который, на мой взгляд, является допустимым, но я все время чувствую ошибку, говоря мне, что есть "набросок" на "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.

ПОЖАЛУЙСТА, ПОМОГИТЕ!

  • 1
    столбец p3 существует в таблице1?
  • 0
    или скорее: существует ли столбец p3 в table3?
Теги:
subquery
exists
mysql-error-1054

2 ответа

1
Лучший ответ

Причиной ошибки является то, что при корреляции можно ссылаться только на уровень подзапроса один. Посмотрите, где указан псевдоним 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". Нет необходимости в дополнительном подзапросе, который у вас есть (что вызывало проблемы в любом случае).

  • 0
    Спасибо, я изменил запрос, как вы предложили, и это сработало. Спасибо!
0

AFAIK, такой коррелированный запрос в настоящее время не выполняется в mysql. Присоединитесь к производной таблице, а не к существующему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню