Problème avec une des mes requêtes

gibea00 Messages postés 17 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 13 novembre 2007 - 30 avril 2007 à 20:25
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 - 1 mai 2007 à 00:15
Salut!

J'ai une requête SQL qui ne me retourne pas exactement ce que je veux. Présentement, j'ai remarqué que si une des deux partie de ma requête n'a pas de données, ma requête au complet ne retourne rien.






Cependant, je voudrais qu'elle retourne toutes les données retrouvées peut importe si une des deux parties ne retourne rien.





J'espère que vous comprenez ce que je veux dire

Merci de votre aide



Voici ma requête :



SELECT


a.
date_transaction
,


a.
nomCaissier
,
b
.
montant_depot
,


a.
montant_ventes

FROM




(SELECT


TO_CHAR(t.
date_transaction
,
'DD/MM/YYYY'
)
date_transaction
,




 u.
nom ||
', '
||
u.
prenom nomCaissier
,


t.
usr_id
,




 SUM(t.
prix
)
montant_ventes

 FROM


SGV_TAB_TRANSACTIONS


t,


SGV_TAB_USAGERS


u




 WHERE


u.ID


=


t.
USR_ID
 
AND


t.
date_transaction
>=


TO_DATE(
'30-04-2007 00:00:00'
,


'DD/MM/YYYY HH24:MI:SS'
)
AND


t.
date_transaction
<=


TO_DATE(
'30-04-2007 23:59:59'
,


'DD/MM/YYYY HH24:MI:SS'
)


  AND


t.
usr_id
=


'392'




GROUP


BY


TO_CHAR(t.
date_transaction
,
'DD/MM/YYYY'
),


u.
nom ||
', '
||
u.
prenom
,


t.
usr_id
)


a,






(SELECT


TO_CHAR(
mc
.
date_transaction
,
'DD/MM/YYYY'
)
DATE_TRANSACTION
,


 
u.
nom ||
', '
||
u.
prenom nomCaissier
,
mc
.
usr_id
,


 
SUM(
mc
.
montant_depot
)
montant_depot 

 FROM


SGV_TAB_MONTANT_CAISSE
mc
,


SGV_TAB_USAGERS


u


 
WHERE


u.ID


=
mc
.
USR_ID
 
AND
mc
.
date_transaction
>=


TO_DATE(
'30-04-2007 00:00:00'
,


'DD/MM/YYYY HH24:MI:SS'
)


  AND
mc
.
date_transaction
<=


TO_DATE(
'30-04-2007 23:59:59'
,


'DD/MM/YYYY HH24:MI:SS'
)


AND
mc
.
usr_id
=


'392'




GROUP


BY


TO_CHAR(
mc
.
date_transaction
,
'DD/MM/YYYY'
),


u.
nom ||
', '
||
u.
prenom
,
mc
.
usr_id
)
b


WHERE
b
.
date_transaction
=


a.
date_transaction

AND
b
.
usr_id
=


a.
usr_id

1 réponse

rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
1 mai 2007 à 00:15
Salut 43010 gibea00,

voici la preuve concrète du manque d'ascensceur horizontal optionel (j'ai bien dit "optionnel", parce que parfois, il vaut mieux avoir le choix [NIX, si tu nous regardes :)]).

Bon, il semble que tu aies peut-être besoin de changer de mode de jointure (celle-ci est la forme dite "naturelle" de la jointure, elle a pour résultats les lignes des 2 tables ayant correspondance au vu des critères de la jointure).

En effet, il existe (depuis SQL-92) la jointure externe, dont la principale qualité est de fournir, dans le résultats, des lignes ne répondant pas à tous les critères.
Elle existe sous (au moins) 3 formes, l'externe gauche (LEFT OUTER JOIN), l'externe droit (RIGHT OUTER JOIN), et l'externe centriste (non, j'rigole, la 3ème est l'externe complète [FULL OUTER JOIN]).

La jointure externe gauche tire son nom du fait qu'elle affiche toutes les lignes de la table située à gauche de la jointure, avec en face, les lignes de la table de droite si elles existent, la jointure externe droit fait bien évidemment le contraire, et la jointure externe complète fait un mix des 2.

Au niveau de la syntaxe pour les utiliser, elle dépend souvent du SGBD qui les implémente, mais la plus courante (en SQL-92) est :
SELECT Machin
FROM Trucs LEFT OUTER JOIN Bidules ON Trucs.ID = Bidules.ref
En SQL-89, on trouve aussi des trucs exotiques, des expressions NULL dans la sélection, ou des "égalités étendues" (avec des signes autour du signe égal de jointures, genre *ou* ou +=...).

voilà, espérant t'aider,
à+

rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
0
Rejoignez-nous