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

Résolu
vaginator120 Messages postés 22 Date d'inscription mardi 20 avril 2004 Statut Membre Dernière intervention 12 mars 2007 - 24 oct. 2005 à 10:43
vaughan Messages postés 198 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

6 réponses

vaughan Messages postés 198 Date d'inscription mardi 6 août 2002 Statut Membre Dernière intervention 29 octobre 2008
24 oct. 2005 à 13:15
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
3
vaughan Messages postés 198 Date d'inscription mardi 6 août 2002 Statut Membre Dernière intervention 29 octobre 2008
24 oct. 2005 à 11:19
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
0
vaginator120 Messages postés 22 Date d'inscription mardi 20 avril 2004 Statut Membre Dernière intervention 12 mars 2007 1
24 oct. 2005 à 11:32
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.
0
vaginator120 Messages postés 22 Date d'inscription mardi 20 avril 2004 Statut Membre Dernière intervention 12 mars 2007 1
24 oct. 2005 à 14:28
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 ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MimiGMT Messages postés 28 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 24 juillet 2009
26 oct. 2005 à 16:49
Existe t'il en MySql la fonction isnull(d1.données, '') ??
0
vaughan Messages postés 198 Date d'inscription mardi 6 août 2002 Statut Membre Dernière intervention 29 octobre 2008
27 oct. 2005 à 09:43
<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>
0
Rejoignez-nous