2010-02-19 1 views
5

После запроса хорошо работает в MySQL 5.xMySQL покинул присоединиться к подзапрос неудачу

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 с такой же структурой БД и данных, которые он просто возвращают следующее сообщение :

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

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

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

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

ответ

1

вынимают «граф (Areaid) как граф»

Несколько столбцов в подзапросе Мессинг соединения.

таблица температуры должна работать нормально ....

Удачи!

+0

Вы правы, я могу сделать это только с вкладкой temp ВРЕМЕННЫЙ ТАБЛИЦУ DROP IF EXESTS temp_shop; CREATE TEMPORARY TABLE temp_shop (areaID int (11), count int (11)); INSERT INTO temp_shop выберите t_shop.Areaid, граф (Areaid) как граф \t \t \t \t от t_shop \t \t \t \t группы по t_shop.areaID; ВЫБРАТЬ \t \t \t \t m_area.id, m_area.cn_areaName, m_area.de_areaName, \t \t \t \t m_area.en_areaName, m_area.jp_areaName, temp_shop.count \t \t \t \t ИЗ \t \t \t \t m_area покинул присоединиться temp_shop \t \t \t \t о m_area.id = temp_shop.areaID; Иногда нам приходится указывать некоторые старые машины, что так больно. –

1

Единственное, что я мог придумать, это добавить в подзапрос табличное имя вашего идентификатора области или переименовать зарезервированное слово 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 
+0

thx для вашего комментария, но он по-прежнему не удалось –

4

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


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

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

В версиях MySQL до 4.1, это необходимо работы вокруг или избежать использования подзапросов.
В много случаев, подзапросы могут успешно переписываться с помощью объединений и другими способами. См. Section 12.2.8.11, “Rewriting Subqueries as Joins for Earlier MySQL Versions”.

+0

Ссылка, которую вы предоставили существенно, говорит, что то, что делает OP, является решением проблемы, которую вы упомянули ?! –

 Смежные вопросы

  • Нет связанных вопросов^_^