Faire une requete SQL avec un champs complet qui n'est influencé par la requete. [Résolu]

Messages postés
22
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
12 mars 2007
- - Dernière réponse : vaughan
Messages postés
207
Date d'inscription
mardi 6 août 2002
Statut
Membre
Dernière intervention
29 octobre 2008
- 27 oct. 2005 à 09:43
Bonjour, j'ai un ptit probleme en SQL avec un dataset.

Je voudrais avoir le resultat de ma requete sous la forme suivante:



Libelle donnees1 donnees2



où le champ libelle serait complet (sans sélection sur le resultat) et
les champs donnees1 et donnees2 serait bien affectés par les conditions
de la requete.

Donc au final je voudrais des champs vides où il n'y a pas de resultat pour donnees1 et donnees2.

La difficulté étant que si il n'y a pas de resultat c'est qu'il n'y a
pas de ligne correspondante.Ce n'est donc pas un champs null que je
dois afficher.



exemple:



libelle donnees1 donnees2

--------- ------------- --------------

nom Dupont

prenom
pierre

age
18
25

adresse 15 av delphi

ville
loin
très loin

cp

53000



Peut être il y a t'il un moyen avec un ClientDataSet mais je ne sais pas trop m'en servir .



Merci
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
207
Date d'inscription
mardi 6 août 2002
Statut
Membre
Dernière intervention
29 octobre 2008
3
Merci
En faite c'est un problème de requête, il faut faire des jointures externes afin de ramener les lignes même si il n'éxiste pas d'enregistrement.

La jointure entre ta table libellé et donnée c'est page/Nom_zone

SELECT
l.libelle,
d1.donnees,
d2.donnees
FROM
libelle l,
donnees d1,
donnees d2
WHERE
l.Nom_Zone<>''
AND d2.nom_zone like '%02'
AND d1.nom_zone like '%01'
AND RIGHT JOIN l.Nom_Zone = d1.Nom_Zone
AND RIGHT JOIN l.Nom_Zone = d2.Nom_Zone
AND RIGHT JOIN l.Page= d1.Page
AND RIGHT JOIN l.Page = d2.Page

vaughan

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de vaughan
Messages postés
207
Date d'inscription
mardi 6 août 2002
Statut
Membre
Dernière intervention
29 octobre 2008
0
Merci
Je suis dans le flou :

Les valeurs Nom, prenom , ... sont dans une table et les données 1et 2 sont dans une autre table ?

Peux-tu me transmettre ton descriptif de table (MCD), ainsi que ta requête SQL et le type de ta base de donnée (Oracle, SqlServer, ...)

Afin d'y voir plus claire

vaughan
Commenter la réponse de vaughan
Messages postés
22
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
12 mars 2007
1
0
Merci
ok, c'etait un exemple donc je te donne les vraies tables:

donnees1(d1) et donnees2(d2) sortent de la même table.



donnees:

-------------

Page

Nom_Zone

Type_Zone

Donnees



libelle

-------------

Page

Nom_zone

Libelle



Pour l'instant ma requete c'est :



SELECT l2.libelle l2, d1.donnees d1,d2.donnees d2

FROM libelle l1,donnees d1, donnees d2, libelle l2

WHERE l1.Nom_Zone<>''

AND l2.Nom_Zone<>''

AND l2.Libelle=l1.Libelle

AND ((d2.Nom_Zone like concat(l1.Nom_Zone,'%') AND d2.nom_zone like '%02')

AND (d1.Nom_Zone like concat(l2.Nom_Zone,'%') AND d1.nom_zone like '%01'))



c'est un peu bricolage (ça a commencé à m'énerver au bout de 3 jours
sans résultat.. ) mais ça m'affiche ce que je veux mis à part le fait
que ça enleve les libelles qui n'ont pas de correspondance dans la
table donnees.

Je travaille avec une base MySQL.
Commenter la réponse de vaginator120
Messages postés
22
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
12 mars 2007
1
0
Merci
Mysql n'aime pas du tout cette forme de RIGHT JOIN.

J'ai utilisé :

SELECT l.libelle,d1.donnees, d2.donnees

FROM

donnees d1 RIGHT JOIN libelle l ON (l.Nom_Zone = d1.Nom_Zone),

donnees d2 RIGHT JOIN libelle l1 ON (l1.Nom_Zone = d2.Nom_Zone)



Mais bien sur ça n'affiche que 'libelle', les deux autres champs étant remplis de NULL.

Maintenant que je sais que ma réponse est avec les jointures je vais chercher.

Merci ;)
Commenter la réponse de vaginator120
Messages postés
28
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
24 juillet 2009
0
Merci
Existe t'il en MySql la fonction isnull(d1.données, '') ??
Commenter la réponse de MimiGMT
Messages postés
207
Date d'inscription
mardi 6 août 2002
Statut
Membre
Dernière intervention
29 octobre 2008
0
Merci
<DT>IFNULL(expr1,expr2)
<DD>Si l'argument <TT>expr1</TT> n'est pas <TT>NULL</TT> , la fonction <TT>IFNULL()</TT> retournera l'argument <TT>expr1</TT> , sinon elle retournera l'argument <TT>expr2</TT> . La fonction <TT>IFNULL()</TT> retourne une valeur numérique ou une chaîne de caractères, suivant le contexte d'utilisation :
mysql> SELECT IFNULL(1,0);
-> 1
mysql> SELECT IFNULL(NULL,10);
-> 10
mysql> SELECT IFNULL(1/0,10);
-> 10
mysql> SELECT IFNULL(1/0,'oui');
-> 'oui'

Voir :
http://www.nexen.net/docs/mysql/annotee/control-flow-functions.php

vaughan</DD>
Commenter la réponse de vaughan