MySQL оставил сбой подзапроса соединения

Следующий запрос работает хорошо в MySQL 5.x

SELECT
  m_area.id, m_area.cn_areaName, m_area.de_areaName,
  m_area.en_areaName,m_area.jp_areaName,t_shop.count
FROM
  m_area left join   
(
select t_shop.areaID, count(areaID) AS count
from t_shop
group by t_shop.areaID
) t_shop
on m_area.id = t_shop.areaID

Однако, когда я должен выполнить его в 4.0.23 MySQL DB с той же структурой DB и данными, это просто возвращает следующее сообщение:

1064 - У Вас есть ошибка в Вашем синтаксисе SQL. Проверьте руководство, которое соответствует Вашей серверной версии MySQL для правильного синтаксиса для использования рядом' [

            select t_shop.areaID, count(areaID) AS count
            from t_s 

Я попробовал много раз, но все еще перестал работать. Оставлен соединяют с подзапросом, не позволенным в MySQL 4.x? Затем это означает, что я должен сделать это с временной таблицей?

Заранее спасибо!

5
задан wing_hk 19 February 2010 в 17:57
поделиться

3 ответа

дубль out ", count (areaID) AS count"

Несколько столбцов в подзапросе мешают соединению.

Временная таблица должна работать нормально ....

Удачи!

1
ответ дан 14 December 2019 в 13:34
поделиться

Подзапросы не очень хорошо поддерживались в MySQL 4.0: их стало возможно использовать (по крайней мере, каким-то реальным, полезным способом) в MySQL 4.1 - а MySQL 4.0 уже очень старый...


Смотрите, например, эту страницу руководства MySQL: 12.2.8. Синтаксис подзапросов (цитирование, выделение мое) :

Начиная с MySQL 4.1, все формы и операции подзапросов, которые требует стандарт SQL, поддерживаются. поддерживаются все формы подзапросов и операции, которые требует стандарт SQL, а также несколько функций, которые являются специфичными для MySQL.

В версиях MySQL, предшествующих 4.1, было необходимо было необходимо обходить или избегать использования подзапросов.
Во многих случаях подзапросы можно успешно переписаны с использованием объединений и другие методы. См. Раздел 12.2.8.11, "Переписывание подзапросов в виде объединений для ранних версий MySQL".

4
ответ дан 14 December 2019 в 13:34
поделиться

Единственное, что я мог придумать, - это добавить имя таблицы к вашему идентификатору области в подзапросе или переименовать зарезервированное слово count в cnt.

SELECT  m_area.id
        , m_area.cn_areaName
        , m_area.de_areaName
        , m_area.en_areaName
        ,m_area.jp_areaName
        ,t_shop.cnt
FROM     m_area 
        left join ( 
          select     t_shop.areaID
                    , count(t_shop.areaID) AS cnt 
          from       t_shop 
          group by   t_shop.areaID 
        ) t_shop on m_area.id = t_shop.areaID 
1
ответ дан 14 December 2019 в 13:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: