Следующий запрос работает хорошо в 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? Затем это означает, что я должен сделать это с временной таблицей?
Заранее спасибо!
дубль out ", count (areaID) AS count"
Несколько столбцов в подзапросе мешают соединению.
Временная таблица должна работать нормально ....
Удачи!
Подзапросы не очень хорошо поддерживались в 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".
Единственное, что я мог придумать, - это добавить имя таблицы к вашему идентификатору области в подзапросе или переименовать зарезервированное слово 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