2010-02-19 11 views
5

siguiente consulta funciona bien en MySQL 5.xMySQL dejó unirse subconsulta fallar

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 

Sin embargo, cuando tengo que correr en una base de datos MySQL 4.0.23 con la misma estructura de base de datos y los datos que acabo de volver siguiente mensaje :

1064 - Tiene un error en la sintaxis SQL. Consulte el manual que corresponde a su versión del servidor MySQL para el sintaxis derecho al uso cerca de '[

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

He intentado muchas veces pero todavía fallado. Se deja unir a la subconsulta no permitida en MySQL 4.x? Entonces eso significa que tengo que hacerlo con una tabla temporal?

¡Gracias de antemano!

Respuesta

1

llevar "count (areaid) como el Conde"

Las múltiples columnas en la subconsulta está ensuciando la unión.

Una tabla temporal debería funcionar bien ....

divertirse!

+0

Tiene razón, solo puedo hacerlo con la pestaña temporal TABLA TEMPORAL DE CAÍDA SI EXISTE temp_shop; CREAR TABLA TEMPORAL temp_shop (areaID int (11), count int (11)); INSERT INTO temp_shop select t_shop.areaid, COUNT (areaid) AS recuento \t \t \t \t de t_shop grupo \t \t \t \t por t_shop.areaID; SELECT \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 DE \t \t \t \t m_area dejó unirse temp_shop \t \t \t \t en m_area.id = temp_shop.areaID; A veces tenemos que codificar algunas máquinas antiguas, lo cual es muy doloroso. –

1

Lo único que se me ocurre es agregar el nombre de tabla a su areaID en la subconsulta o cambiar el nombre de la palabra reservada count a 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 para su comentario, pero todavía falló –

4

subconsultas no fueron muy bien soportado con MySQL 4.0: se hizo posible utilizarlos (al menos, de alguna manera real, útil) con MySQL 4.1 - 4.0 y MySQL es muy viejo, ahora. ..


Véase, por ejemplo esta página del manual de MySQL: 12.2.8. Subquery Syntax(citando, el énfasis es mío):

Comenzando con MySQL 4.1, todas las formas de subconsulta y las operaciones que requiere el estándar SQL son compatibles, , así como algunas características que son específicas de MySQL.

Con las versiones de MySQL antes de 4.1, se era necesario trabajo alrededor o evitar el uso de subconsultas.
En muchos casos, las subconsultas pueden reescribirse con éxito usando uniones y otros métodos. Ver Section 12.2.8.11, “Rewriting Subqueries as Joins for Earlier MySQL Versions”.

+0

El enlace que ha proporcionado dice que lo que hace OP es la solución al problema que menciona ?! –