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

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

0 голосов
/ 11 июня 2010

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

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

Ответы [ 2 ]

1 голос
/ 11 июня 2010

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

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

...