Почему этот SQL-запрос не выполняется? - PullRequest
2 голосов
/ 18 апреля 2011

Рассмотрим следующий SQL:

SELECT mov
FROM movie
WHERE mov IN
    (
        SELECT mov
        FROM movie_star
        GROUP BY(mov)
        HAVING count(star) > 6
    )
INNER JOIN movie_star
ON movie_star.mov = movie.mov;

Я получаю следующую ошибку при выполнении этого запроса:

.ERROR 1064 (42000): у вас ошибка в синтаксисе SQL; проверить руководство, которое соответствует вашей версии сервера MySQL для права синтаксис для использования возле внутреннего соединения movie_star на movie_star.mov = movie.mov 'в строке 3

Ответы [ 4 ]

5 голосов
/ 18 апреля 2011

JOIN должен идти перед предложением WHERE.

SELECT movie.mov
FROM movie
INNER JOIN movie_star ON movie_star.mov = movie.mov
WHERE mov IN (SELECT mov FROM movie_star GROUP BY mov HAVING COUNT(star) > 6);
3 голосов
/ 18 апреля 2011

Вот этот же запрос немного убрал:

select mov
from movie
where
    mov in (select mov from movie_star group by(mov) having count(star) > 6)
inner join movie_star on movie_star.mov = movie.mov

У вас есть синтаксическая ошибка, потому что inner join появляется после вашего предложения where, когда оно должно появляться сразу после предложения from.

Попробуйте вместо этого:

select mov
from movie
inner join movie_star on movie_star.mov = movie.mov
group by mov
having count(*) > 6
1 голос
/ 18 апреля 2011

Вы должны присоединиться, прежде чем сможете использовать предложение where:

select mov from movie
inner join movie_star on movie_star.mov = movie.mov
where mov in
(select mov from movie_star group by(mov) having count(star)>6)
1 голос
/ 18 апреля 2011

Вы получили внутреннее соединение не в том месте.Не уверен, что вообще вижу необходимость внутреннего соединения, когда вы выбираете только столбец movie.mov, а предложение IN уже гарантирует, что в movie_star.

select mov 
    from movie
        inner join movie_star 
            on movie_star.mov = movie.mov
    where mov in (select mov 
                      from movie_star 
                      group by(mov) 
                      having count(star)>6);
есть соответствующие строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...