Bonjour,
J'ai une table "R" comme celle-ci:
id | ad | ne | nm |
Bonjour,
J'ai une table "R" comme celle-ci:
id | ad | ne | nm |
Bonjour,
J'ai une table "R" comme celle-ci:id | ad | ne | nm |
-------------------
1 | a | d | |
2 | a | | e |
3 | b | f | |
4 | c | | g |et "S" comme ceci:
id | ad | n | s |
-------------------
1 | a | d | f |
2 | a | e | m |
3 | b | f | f |
4 | c | g | m |En réalité j'ai 600 enregistrements,
J'ai besoin d'une requête SQL qui me donne ceciad | ne | nm |
-------------------
a | d | e |
b | f | |
c | | g |C'est un fichier d'adhérents d'une association, ad est une adresse
postale, ne le prénom de l'épouse, nm du mari, n celui de l'adhérent, s
son sexe.
Mon projet est de faire des étiquettes (le moins possible) pour envoyer
du courrier à tous les adhérents.Je suis presque débutant en SQL.
Est-ce possible?
Ai-je raison de continuer à chercher dans les manuels?
Dois-je utiliser "R" ou "S"?D'avance merci de votre aide.
JM Barbault
Bonsoir,
Possible en créant une requête avec les deux tables en groupant sur ad
Pour faciliter l'aide , tu peux joindre ta base,ou un extrait.
J.M
Bonsoir,
Bonjour,
J'ai une table "R" comme celle-ci:id | ad | ne | nm |
-------------------
1 | a | d | |
2 | a | | e |
3 | b | f | |
4 | c | | g |et "S" comme ceci:
id | ad | n | s |
-------------------
1 | a | d | f |
2 | a | e | m |
3 | b | f | f |
4 | c | g | m |En réalité j'ai 600 enregistrements,
J'ai besoin d'une requête SQL qui me donne ceciad | ne | nm |
-------------------
a | d | e |
b | f | |
c | | g |C'est un fichier d'adhérents d'une association, ad est une adresse
postale, ne le prénom de l'épouse, nm du mari, n celui de l'adhérent, s
son sexe.
Mon projet est de faire des étiquettes (le moins possible) pour envoyer
du courrier à tous les adhérents.Je suis presque débutant en SQL.
Est-ce possible?
Bon casse tête en tous les cas.
est-il possible d'avoir 2 adhérents masculins à la même adresse... (pour
corser un peu plus
)
Ai-je raison de continuer à chercher dans les manuels?
Dois-je utiliser "R" ou "S"?
A mon avis on doit pouvoir se débrouiller avec la table S seule..
Créer 2 vues/tables équivalentes à :
T1 = select ad, n as "ne" from S where S="f"
T2 = select ad, n as "nm" from S where S="m"
ensuite un select comme suit :
select ad.T1, ne, nm from T1, T2 where ad.T1=ad.T2
union
select ad.T1, ne, nm from T1, T2 where ad.T1 not in (select ad from T2)
union
select ad.T2, ne, nm from T1, T2 where ad.T2 not in (select ad from T1)
Pas testé, mais le principe y est.
Nb: y'a peut-être moyen de faire plus simple, mais j'ai fait au + rapide 
Yves.
Bonjour Yves,
A mon avis on doit pouvoir se débrouiller avec la table S seule..
Créer 2 vues/tables équivalentes à :
T1 = select ad, n as "ne" from S where S="f"
Il faut mettre :
select ad, n as "ne" from S where S.s='f'
sinon le parseur de Base se plante parce qu'il transforme le champ 's'
minuscule en 'S' majuscule, d'où confusion avec le nom de la table et
génération d'erreur.
T2 = select ad, n as "nm" from S where S="m"
idem ici, en remplaçant "m" par 'm'
ensuite un select comme suit :
select ad.T1, ne, nm from T1, T2 where ad.T1=ad.T2
union
select ad.T1, ne, nm from T1, T2 where ad.T1 not in (select ad from T2)
union
select ad.T2, ne, nm from T1, T2 where ad.T2 not in (select ad from T1)
Cela donne le message d'erreur suivante :
La commande n'est pas une instruction SELECT.
Seules les requêtes sont autorisées.
SELECT "ad"."T1", "ne", "nm" FROM "T1", "T2" WHERE "ad"."T1" = "ad"."T2"
UNION SELECT "ad"."T1", "ne", "nm" FROM "T1", "T2" WHERE "ad"."T1" NOT
IN ( SELECT "ad" FROM "T2" )
UNION SELECT "ad"."T2", "ne", "nm" FROM "T1", "T2" WHERE "ad"."T2" NOT
IN ( SELECT "ad" FROM "T1" )
Si je désactive le parseur en passant directement par l'exécution de la
requête SQL, j'ai droit à ça :
Column not found: AD.T1 in statement [select ad.T1, ne, nm from T1, T2
where ad.T1=ad.T2
union select ad.T1, ne, nm from T1, T2 where ad.T1 not in (select ad
from T2)
union select ad.T2, ne, nm from T1, T2 where ad.T2 not in (select ad
from T1)]
C'est un bug déjà répertorié d'OOo de transformer les noms en majuscules
- alors, morale de l'histoire : n'utiliser que des majuscules partout
pour éviter ce genre de plaisanterie ?
Si je corrige ta requête en mettant ceci à la place :
select "T1"."ad", "ne", "nm" from T1, T2 where "T1"."ad"="T2"."ad"
union select "T1"."ad", "ne", "nm" from T1, T2 where "T1"."ad" not in
(select "ad" from T2)
union select "T2"."ad", "ne", "nm" from T1, T2 where "T2"."ad" not in
(select "ad" from T1)
Il faut en effet, mettre le nom de la Vue avant la colonne, sinon la
requête ne fonctionne pas.
J'obtiens :
ad ne nm
a d e
b f e
b f g
c d g
c f g
Qui dit mieux ? :-ppp
Alex
Bonjour Alex,
Tout d'abord merci pour toutes ces corrections de syntaxe 
:
Bonjour Yves,
> A mon avis on doit pouvoir se débrouiller avec la table S seule..
> Créer 2 vues/tables équivalentes à :
> T1 = select ad, n as "ne" from S where S="f"Il faut mettre :
select ad, n as "ne" from S where S.s='f'
sinon le parseur de Base se plante parce qu'il transforme le champ 's'
minuscule en 'S' majuscule, d'où confusion avec le nom de la table et
génération d'erreur.> T2 = select ad, n as "nm" from S where S="m"
idem ici, en remplaçant "m" par 'm'
> ensuite un select comme suit :
> select ad.T1, ne, nm from T1, T2 where ad.T1=ad.T2
> union
> select ad.T1, ne, nm from T1, T2 where ad.T1 not in (select ad from T2)
> union
> select ad.T2, ne, nm from T1, T2 where ad.T2 not in (select ad from T1)
>Cela donne le message d'erreur suivante :
La commande n'est pas une instruction SELECT.
Seules les requêtes sont autorisées.SELECT "ad"."T1", "ne", "nm" FROM "T1", "T2" WHERE "ad"."T1" = "ad"."T2"
UNION SELECT "ad"."T1", "ne", "nm" FROM "T1", "T2" WHERE "ad"."T1" NOT
IN ( SELECT "ad" FROM "T2" )
UNION SELECT "ad"."T2", "ne", "nm" FROM "T1", "T2" WHERE "ad"."T2" NOT
IN ( SELECT "ad" FROM "T1" )Si je désactive le parseur en passant directement par l'exécution de la
requête SQL, j'ai droit à ça :Column not found: AD.T1 in statement [select ad.T1, ne, nm from T1, T2
where ad.T1=ad.T2
union select ad.T1, ne, nm from T1, T2 where ad.T1 not in (select ad
from T2)
union select ad.T2, ne, nm from T1, T2 where ad.T2 not in (select ad
from T1)]C'est un bug déjà répertorié d'OOo de transformer les noms en majuscules
- alors, morale de l'histoire : n'utiliser que des majuscules partout
pour éviter ce genre de plaisanterie ?Si je corrige ta requête en mettant ceci à la place :
select "T1"."ad", "ne", "nm" from T1, T2 where "T1"."ad"="T2"."ad"
union select "T1"."ad", "ne", "nm" from T1, T2 where "T1"."ad" not in
(select "ad" from T2)
union select "T2"."ad", "ne", "nm" from T1, T2 where "T2"."ad" not in
(select "ad" from T1)Il faut en effet, mettre le nom de la Vue avant la colonne, sinon la
requête ne fonctionne pas.J'obtiens :
ad ne nm
a d e
b f e
b f g
c d g
c f gQui dit mieux ? :-ppp
Comprenait pas le résultat mais c'est parce que j'avais oublié le where
...(du moins je crois)
select "T1"."ad", "ne", "nm" from T1, T2 where "T1"."ad"="T2"."ad"
union select "T1"."ad", "ne", "nm" from T1, T2 where "T1"."ad" not in
(select "ad" from T2 where T2."ad"="T1".ad)
union select "T2"."ad", "ne", "nm" from T1, T2 where "T2"."ad" not in
(select "ad" from T1 where T1."ad"="T2".ad)
Je te laisse tester ? (j'espère que t'a pas viré la base
)
Yves
Bonjour Yves,
Comprenait pas le résultat mais c'est parce que j'avais oublié le where
...(du moins je crois)select "T1"."ad", "ne", "nm" from T1, T2 where "T1"."ad"="T2"."ad"
union select "T1"."ad", "ne", "nm" from T1, T2 where "T1"."ad" not in
(select "ad" from T2 where T2."ad"="T1".ad)
union select "T2"."ad", "ne", "nm" from T1, T2 where "T2"."ad" not in
(select "ad" from T1 where T1."ad"="T2".ad)Je te laisse tester ? (j'espère que t'a pas viré la base
)
Ah non, ce genre de truc, je garde
justement pour tester :-))
J'ai dû corriger ta requête à nouveau pour inclure les "" aux endroits
nécessaires, et voici le résultat (en mode SQL direct), sinon ça ne
marche pas :
select "T1"."ad", "ne", "nm" from T1, T2 where "T1"."ad"="T2"."ad"
union select "T1"."ad", "ne", "nm" from T1, T2 where "T1"."ad" not in
(select "ad" from T2 where T2."ad"="T1"."ad")
union select "T2"."ad", "ne", "nm" from T1, T2 where "T2"."ad" not in
(select "ad" from T1 where "T1"."ad"="T2"."ad")
ad ne nm
a d e
b f e
b f g
c d g
c f g
Hmmm....c'est pareil...
Alex
Bonjour,
Je souhaiterais ne travailler qu'avec l'une des tables,
R ou S ce sont en fait les résumés de deux requêtes faites sur une base
beaucoup plus complexe.
http://www.cijoint.fr/cjlink.php?file=cj201103/cijuWbUZYD.odb
Merci
JMB
Bonjour,
Je souhaiterais ne travailler qu'avec l'une des tables,
R ou S ce sont en fait les résumés de deux requêtes faites sur une base
beaucoup plus complexe.
http://www.cijoint.fr/cjlink.php?file=cj201103/cijuWbUZYD.odb
Merci
JMB
Ce fichier ne fait que reproduire ce que tu avais mis dans ton mail, à
partir duquel j'avais déjà créé un ODB pour essayer de trouver qq chose
qui marche. Je dirais qu'il faudrait plutôt modifier ta (tes) requête(s)
de départ pour obtenir qq chose de convenable...mais comme on ne sait
pas ce qu'elle(s) est (sont), on va avoir du mal à t'indiquer la piste.
Alex
Bonjour,
L'idée de l'union me parait génial, je bosse dessus.
Il me manque une astuce :comment créer un champ vide ou null ?
JMB
ça c'est réglé, j'ai trouvé.
J'en suis là, les trois requêtes sont efficaces séparément mais UNION
conduit au problème suivant:
http://www.cijoint.fr/cjlink.php?file=cj201103/cijvawua5n.png
JMB
Victoire, je l'ai eu!!!!!!
http://www.cijoint.fr/cjlink.php?file=cj201103/cijvawua5n.png
Voilà l'astuce que j'ai utilisée:
Quand R_FEM et R_HOM sont des requêtes, l'UNION ne se fait pas.
Quand R_FEM et R_HOM sont des vues, l'UNION se fait.
Merci à tous ceux qui m'ont aidé:
yves dutrieux, Alexander Thurgood, Jean Michel PIERRE.
Je ne sais pas où vous êtes mais vous pouvez avancer à la maison, je
vais arroser ça, ça fait 6 mois que je cherchais sur des jointures sans
succès.
Encore une fois merci de votre réactivité.
JMB
c f g
Hmmm....c'est pareil...
Alex
Bonjour,
L'idée de l'union me parait génial, je bosse dessus.
Il me manque une astuce :comment créer un champ vide ou null ?
JMBça c'est réglé, j'ai trouvé.
J'en suis là, les trois requêtes sont efficaces séparément mais UNION
conduit au problème suivant:
http://www.cijoint.fr/cjlink.php?file=cj201103/cijvawua5n.png
JMBVictoire, je l'ai eu!!!!!!
http://www.cijoint.fr/cjlink.php?file=cj201103/cijvawua5n.png
Voilà l'astuce que j'ai utilisée:
Quand R_FEM et R_HOM sont des requêtes, l'UNION ne se fait pas.
Quand R_FEM et R_HOM sont des vues, l'UNION se fait.
Merci à tous ceux qui m'ont aidé:
yves dutrieux, Alexander Thurgood, Jean Michel PIERRE.
Je ne sais pas où vous êtes
Jamais très loin !
Je me demandais si tu étais aussi allé voir dans le forum pour trouver des solutions ?
http://user.services.openoffice.org/fr/forum/search.php
J.M