Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/03/2011, 11h28   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2010
Messages : 42
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 42
Points : 11
Points : 11
Par défaut Problème de jointure

Bonjour à tous,

j'essaie désespérément d'effectuer une jointure entre 2 tables afin que le résultat de ma requête me ramène l'ensemble des données, qu'elles trouvent une donnée ou pas.

Ma requête doit me renseigner sur les spécificités de véhicules. certains de ces véhicules possèdent des options et d'autres non.

Si je ne récupère pas les options des véhicules, la requête me ramène environ 40 000 lignes mais si je demande les options, je n'en ai plus que 23 000 ce qui signifie que ca ne ramene que les champs pour lesquels j'ai une équivalenece.

J'ai testé le left join, right join, inner join, natural join... mais sans meilleur résultat.

Pouvez vous venir en aide à un petit débutant ?

Merci d'avance,

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
SELECT  p.PARC_ID, p.MARQUE, p.CODE_PF, p.CODE_CATEGORIE, convert(char,c.DTE_DMC,103) AS DTE_DMC, c.PTC,
	    cast(sum((datediff(d,c.DTE_DMC,CURRENT_TIMESTAMP))) AS numeric)/365/count(p.PARC_ID) AS Age,
	    r.CODE_MODELE_ARTICLE
 
FROM PARC p, PARC_CGRISE c
LEFT JOIN  RL_ARTVENDPARC r ON r.PARC_ID = c.PARC_ID 
 
WHERE p.PARC_ID = c.PARC_ID
AND   c.DTE_DMC IS NOT NULL
AND   r.CODE_FAMARTICLE LIKE 'group_opt'
 
GROUP BY p.PARC_ID, p.MARQUE, p.CODE_PF, p.CODE_CATEGORIE, c.DTE_DMC, c.PTC, r.CODE_MODELE_ARTICLE
ORDER BY p.parc_id ASC
ridokou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 11h42   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Vous mélangez les types de jointure

Enlevez votre jointure "à l'ancienne" du coup retirez également :
Code :
1
2
 
WHERE p.PARC_ID = c.PARC_ID
qui est la raison du filtrage des lignes que vous attenez :

Avec votre jointure externe sur RL_ARTVENDPARC, les véhicules n'ayant pas d'options auront la colonne ID_PARC à NULL... et donc la condition p.PARC_ID = c.PARC_ID ne sera pas vérifiée.

de même celle-ci non plus :
Code SQL :
1
2
 
AND   r.CODE_FAMARTICLE LIKE 'group_opt'

Essayez :
Code SQL :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
SELECT  p.PARC_ID, p.MARQUE, p.CODE_PF, p.CODE_CATEGORIE, convert(char,c.DTE_DMC,103) AS DTE_DMC, c.PTC,
	    cast(sum((datediff(d,c.DTE_DMC,CURRENT_TIMESTAMP))) AS numeric)/365/count(p.PARC_ID) AS Age,
	    r.CODE_MODELE_ARTICLE
 
FROM PARC p
INNER JOIN PARC_CGRISE c ON c.ID_PARC = p.ID_Parc
LEFT JOIN  RL_ARTVENDPARC r ON r.PARC_ID = p.PARC_ID 
 
WHERE c.DTE_DMC IS NOT NULL
AND   (r.CODE_FAMARTICLE  IS NULL OR r.CODE_FAMARTICLE LIKE 'group_opt')
 
GROUP BY p.PARC_ID, p.MARQUE, p.CODE_PF, p.CODE_CATEGORIE, c.DTE_DMC, c.PTC, r.CODE_MODELE_ARTICLE
ORDER BY p.parc_id ASC
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 11h45   #3
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
En fait, vous pourriez même remplacer votre LIKE par un =, et déplacer votre condition dans la jointure :
Code SQL :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
SELECT  p.PARC_ID, p.MARQUE, p.CODE_PF, p.CODE_CATEGORIE, convert(char,c.DTE_DMC,103) AS DTE_DMC, c.PTC,
	    cast(sum((datediff(d,c.DTE_DMC,CURRENT_TIMESTAMP))) AS numeric)/365/count(p.PARC_ID) AS Age,
	    r.CODE_MODELE_ARTICLE
 
FROM PARC p
INNER JOIN PARC_CGRISE c 
    ON c.ID_PARC = p.ID_Parc
LEFT JOIN  RL_ARTVENDPARC r 
    ON r.PARC_ID = p.PARC_ID 
    AND r.CODE_FAMARTICLE = 'group_opt'
WHERE c.DTE_DMC IS NOT NULL
GROUP BY p.PARC_ID, p.MARQUE, p.CODE_PF, p.CODE_CATEGORIE, c.DTE_DMC, c.PTC, r.CODE_MODELE_ARTICLE
ORDER BY p.parc_id ASC
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 12h03   #4
Candidat au titre de Membre du Club
 
Inscription : novembre 2010
Messages : 42
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 42
Points : 11
Points : 11
Merci beaucoup aieeeuuuuu, vous me venez en aide régulièrement en ces derniers temps et comme d'habitude c'est parfait.

passez une bonne journee
ridokou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 12h06   #5
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
de rien

Bonne journée également
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h32.


 
 
 
 
Partenaires

Hébergement Web