Aller au contenu

Limiter les lignes d'un LEFT JOIN


Sujets conseillés

Posté

Bonjour à tous,

J'ai une requête qui sélectionne un certain nombre d'objets, et j'aimerais avoir pour chacun de ces objets les 5 derniers attributs (stockés dans une autre table)...

Il faut prendre en compte que pour chacun de ces objets, il est possible qu'il y ait un très grand nombre d'attributs : ce n'est pas acceptable de tous les sélectionner avec un LEFT JOIN (code 1). J'aimerais également éviter de faire une boucle sur les objets, et de faire une requête SQL pour chacun de ces objets... :/

Code 1 :

SELECT a.var, d.nom
FROM objets a
LEFT JOIN attributs d ON a.id = d.idobjet

J'aimerais si possible limiter le nombre de résultats différents de LEFT JOIN... Le moteur SQL doit savoir le faire, mais je sais pas s'ils ont prévu une commande pour le faire. Un LIMIT interne serait idéal. Mais bon, je n'y crois pas trop... J'ai vu que dans d'autres langages de BDD, il était possible de faire des sous-requêtes à l'intérieur du LEFT JOIN, mais ça ne marche pas en SQL.

Avez-vous déjà été confronté à ce genre de situation épineuse ?

Posté

Un truc de ce genre peut-être?


SELECT a.var, d.nom
FROM objets a
LEFT JOIN attributs d ON a.id = d.idobjet WHERE d.id IN (SELECT id FROM attributs WHERE idobjet=a.id ORDER BY whatever LIMIT 5)

Jacques.

Posté

Bonjour,

Merci pour ta réponse et excuse-moi du temps de la mienne ; j'ai été un peu speed cette semaine, pas eu le temps de regarder de ce côté-là.

#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

Au moins, il est très clair : il va falloir que je fasse autrement... J'ai bien une idée pour décharger l'appel à cette page au détriment de celles où on écrit les attributs (grâce à l'ajout d'une colonne supplémentaire...). Mais bon, j'arrête pas de tomber sur des choses que je trouve moi-même sales sur ce site, ça va finir par m'agacer. :D

Posté

Il doit pas être tout jeune ton mysql, les subqueries sont supportées depuis la 4.1... Il serait peut-être temps de faire un petit upgrade :-)

Jacques.

Posté

D'après le message d'erreur, ce ne sont pas les subqueries qui sont en défaut dans la version de MySql, mais l'utilisation des LIMIT et des IN à l'intérieur d'une sous-requête...

Version du serveur: 5.1.37-1ubuntu5
Posté

Ah effectivement j'avais lu un peu vite. Je ne savais pas qu'il y avait encore ce genre de limites dans mysql, moi j'utilise postgresql qui n'a pas ce genre de problème...

Mais dans ce cas je ne sais pas trop comment tu peux faire en SQL pur :-(

Jacques.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...