2010-02-19 17 views
5
sous_requête

Après requête fonctionne bien dans MySQL 5.xMySQL gauche se joindre à l'échec

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 

Cependant, quand je dois courir dans un 4.0.23 MySQL DB avec la même structure de DB et les données qu'il message suivant juste retour :

1064 - Vous avez une erreur dans votre syntaxe SQL. Consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser à proximité [

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

J'ai essayé plusieurs fois, mais toujours pas. Est-ce que la jointure gauche à la sous-requête n'est pas autorisée dans MySQL 4.x? Alors ça veut dire que je dois le faire avec une table temporaire?

Merci d'avance!

Répondre

1

ôtes "compter (Areaid) AS count"

Les multiples colonnes dans la sous-requête est chambouler la jointure.

Une table temporaire devrait fonctionner correctement ....

Amusez-vous!

+0

Vous avez raison, je ne peux le faire avec l'onglet temp DROP TEMPORARY TABLE SI EXISTS temp_shop; CREATE TABLE TEMPORAIRE temp_shop (areaID int (11), count int (11)); INSCRIRE DANS temp_shop sélectionnez t_shop.Areaid, compter (Areaid) AS comptage \t \t \t \t de t_shop \t \t \t groupe \t par 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 left join temp_shop \t \t \t \t sur m_area.id = temp_shop.areaID; Parfois, nous devons coder pour certaines vieilles machines, ce qui est si douloureux. –

1

La seule chose à laquelle je pourrais penser est d'ajouter le nom de table à votre areaID dans la sous-requête ou de renommer le mot réservé count en 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 pour votre commentaire mais il a encore échoué –

4

sous-requêtes ont été très mal pris en charge avec MySQL 4.0: il est devenu possible de les utiliser (au moins, dans certains réel moyen utile) avec MySQL 4.1 - 4.0 et MySQL est vraiment vieux, maintenant. ..


Voir par exemple cette page du manuel MySQL: 12.2.8. Subquery Syntax(citant, Souligné par l'auteur):

À partir de MySQL 4.1, toutes les formes et opérations de sous-requêtes requises par la norme SQL sont prises en charge, , ainsi que quelques fonctionnalités propres à MySQL.

Avec les versions de MySQL avant 4.1, il était nécessaire de travail autour ou éviter l'utilisation de sous-requêtes.
Dans de nombreux cas, les sous-requêtes peuvent être réécrites avec succès en utilisant les jointures et d'autres méthodes. Voir Section 12.2.8.11, “Rewriting Subqueries as Joins for Earlier MySQL Versions”.

+0

Le lien que vous avez fourni essentiellement dit que ce que OP fait est la solution au problème que vous mentionnez ?! –