2010-12-16 3 views
2

Cette requête ne fonctionne pasMySQL sous-requêtes ne fonctionne pas, génération de code d'erreur 1064

SELECT * FROM Catalogue WHERE Catalogue.ID IN (
    SELECT ID_catalogue FROM Categories WHERE Categories.Product_type='xxx' 
) 

Code d'erreur: 1064 Vous avez une erreur dans votre syntaxe SQL près de « SELECT ID_catalogue des catégories OÙ Categories.Product_type = 'xxx') 'à ligne 2

Ok, c'est parce que je me sers d'une très ancienne version MySQL.

Ce que je suis en train de faire est

SELECT * FROM Catalogue WHERE Product_type='xxx' OR Catalogue.ID IN (
    SELECT ID_catalogue FROM Categories WHERE Categories.Product_type='xxx' 
) 

Y at-il équivalent pour cela?

Merci pour tous vos commentaires.

+1

Quelle version mysql utilisez-vous? On dirait que vous en avez un: -S – zerkms

+4

Quelle version de MySQL utilisez-vous? Le support de sous-requête a été ajouté en 4.1, en 2003. –

Répondre

4

Si vous utilisez la version mysql < = 4,0 - alors il est la raison, étant donné que les sous-requêtes ont été ajoutés dans 4,1

 SELECT c.*, 
      g.ID_catalogue 
     FROM Catalogue c 
    LEFT JOIN Categories g ON g.ID_catalogue = c.ID 
         AND g.Product_type='xxx' 
    HAVING ID_catalogue IS NOT NULL 
     OR Product_type = 'xxx' 

Vous devez ajouter indice composite ID_catalogue + Product_type pour la table Categories et index Product_type pour la table Catalogue à ont cette requête effectuée rapidement

+1

Je vois. Je vous remercie! C'est 3.23: S – Aximili

+0

Existe-t-il une requête équivalente pour la version 3.23? – Aximili

+2

@aximili: la dernière version a été 3,23 en Septembre 11, 2003. Je vous recommande fortement de mettre à jour: -S – zerkms

3

Il n'y a rien de mal à votre requête. C'est la version de MySQL qui est plus que probablement votre problème.

+0

Comme déjà couvert dans les commentaires. Ne volez pas la réputation de zerkms. –

+2

@dan Zerkms aurait du le mettre dans une réponse. Voir aussi l'autre réponse. Vous devriez réprimander cette personne aussi pour être un voleur. Je n'étais pas au courant qu'il y avait quelque chose de mal à apprendre des autres commentaires, mais avoir le courage de le mettre dans une réponse, bonne ou mauvaise. – johnny

+0

@johnny: je n'aime pas deviner. Je réponds seulement quand je suis sûr que c'est la bonne réponse. Dans ce cas particulier, il peut également s'agir d'une sorte de caractère non typé juste avant la sous-requête 'select'. – zerkms

Questions connexes