Подзапросы MySQL не работают, генерируется код ошибки 1064 - PullRequest
2 голосов
/ 16 декабря 2010

Этот запрос не работает

SELECT * FROM Catalogue WHERE Catalogue.ID IN (
    SELECT ID_catalogue FROM Categories WHERE Categories.Product_type='xxx'
)

Код ошибки: 1064 У вас есть ошибка в синтаксисе SQL рядом с «SELECT ID_catalogue FROM Categories WHERE Categories.Product_type = 'xxx') 'встрока 2

Хорошо, это потому, что я использую очень старую версию MySQL.

Я пытаюсь получить

SELECT * FROM Catalogue WHERE Product_type='xxx' OR Catalogue.ID IN (
    SELECT ID_catalogue FROM Categories WHERE Categories.Product_type='xxx'
)

Есть ли эквивалент?за это?

Спасибо за все ваши комментарии.

Ответы [ 2 ]

4 голосов
/ 16 декабря 2010

Если вы используете версию MySQL <= 4.0 - это причина, так как подзапросы были добавлены в 4.1 </p>

     SELECT c.*,
            g.ID_catalogue
       FROM Catalogue c
  LEFT JOIN Categories g ON g.ID_catalogue = c.ID
                        AND g.Product_type='xxx'
     HAVING ID_catalogue IS NOT NULL
         OR Product_type = 'xxx'

Вы должны добавить составной индекс ID_catalogue + Product_type для таблицы Categories И индексProduct_type для таблицы Catalogue, чтобы этот запрос выполнялся быстро

3 голосов
/ 16 декабря 2010

В вашем запросе нет ничего плохого.Это версия MySQL, которая, скорее всего, ваша проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...