Je découvre la nouvelle manière de faire des jointures en SQL (avec INNER JOIN etc..) et j'ai un petit problème de requête SQL !
Imaginons que j'ai une table "objets" et une table "photosObjets". Un objet possède soit 0 soit N (1 ou plusieurs) photos. Une photo appartient à un seul.
Si je possède un objet "voiture" qui a 3 photos, la requête suivante affichera 3 fois l'objet voiture :
SELECT *
FROM objets
LEFT OUTER JOIN photosobjets USING (idObjet)
Comment faire pour supprimer les doublons ? (tout en gardant "SELECT *" (et donc en n'utilisant pas "DISTINCT" ?))
Pour supprimer les doublons, il faut utiliser SELECT DISTINCT, y'a pas de photos.
Par contre, 'faudrait nous donner plus d'informations. Tu fais une jointure, c'est tout à fait normal que si "voiture" a trois photos, qu'il y ait 3 lignes concernant "voiture" retournées. Ce n'est pas un doublon.
Dans ma base, j'ai un objet "voiture" avec 3 photos et un objet "bateau" sans photo.
Je voudrais afficher tous les objets de ma base (c'est à dire avoir 2 résultats) avec les informations de photos car je veux pouvoir montrer UNE SEULE des photos en rapport avec l'objet.
Pourquoi t'as édité ton message ?? Si je te demande tes tables, c'est peut-être parce qeu je réfléchis à une solution et que je veux être sûr que ça marchera dans ton cas. Tu crois pas ??
[...] je veux pouvoir montrer UNE SEULE des photos en rapport avec l'objet.
Et comment comptes-tu choisir cette photo ? Le SGBDR fait exactement ce que tu lui demandes et selon les informations que tu nous as données, il n'y a aucun doublon dans ce que la requête renvoie. Ce n'est pas parce qu'il y a trois fois "voiture" (comportement tout à fait normal et logique) que c'est un doublon.
Inutile de me répéter que la BDD fait ce que je lui demande, j'imagine qu'elle ne fait pas exprès de m'embêter et qu'elle se contente de faire son boulot. Ce que j’appelle ici "doublons" ce sont des résultats semblables qui me gène dans une requête.
@Taguan
Imaginons que j'ai une table "objets" avec "idObjet" et "nombObjet". Une table "photosobjets" avec "idPhotoObjet", "nomPhoto", "idObjet".
Dans ma base, j'ai un objet "voiture" avec 3 photos et un objet "bateau" sans photo.
Comment afficher mes deux objets (donc seulement 2 résultats dans ma requête) et pouvoir utiliser les informations de photos pour chaque objet ?
On peut imaginer comme résultat à la requête que je souhaiterai :
1 voiture photo1 photo2
2 bateau NULL(pas de photo)
Cette requête ne veut rien dire du tout, d'ailleurs elle ne passerait pas sous d'autres SGBDR que MySQL. Elle marche grâce au laxisme de MySQL.
Si tu avais lu mon message correctement, tu aurais lu "Et comment comptes-tu choisir cette photo ?". Si je te dis que le SGBDR agit comme cela, c'est bien pour te montrer que tu ne fournis pas assez d'infos pour pouvoir sélectionner correctement une ligne.
La requête avec GROUP BY groupe effectivement par idObjet, mais remplit les autres colonnes de valeurs dénuées de sens (la première rencontrée, en l'occurrence). C'est plutôt aléatoire et définitivement pas une méthode "propre".
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Tutoriel complet MySQL !
Tutoriel complet MySQL !