Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Re: Probl. criteres extraction

Re: Probl. criteres extraction

From: Michel Cadot <micadot{at}altern{dot}org>
Date: Tue, 22 Feb 2005 18:56:28 +0100
Message-ID: <421b7219$0$8123$636a15ce@news.free.fr>

"Mark Bole" <makbo_at_pacbell.net> a écrit dans le message de news:ONySd.10009$DC6.2313_at_newssvr14.news.prodigy.com...
| Mark Bole wrote:
|
| > Kevin wrote:
| >
| >> Je dois extraire de ma base, toutes les donnees des abonnes en
| >> fonction de
| >> ce qui est dans mon "select".
| >> Par contre, il ne faut pas que j'ai ceux dont l'adresse n'est pas bonne
| >> (retour des courriers par la Poste avec mention NPAI) :
| >> Pour eux, 3 criteres sont donnes :
| >> "M" pour ceux dont l'adresse est definitivement bloquee et a qui on
| >> envoie
| >> plus rien
| >> "1" pour ceux dont on a recu tres peu de courrier NPAI
| >> "2" pour ceux dont les retours NPAI sont plus importants mais pas bloques
| >>
| >> J'ai reussi a ecrire la requete suivante mais mes criteres de
| >> selection sur
| >> "M", "1" et "2" ne marchent pas et je vois plus trop comment faire... Je
| >> debute en SQL (j'ai repris la requete d'une deja faite). Si qqu'un peu me
| >> corriger ma requete, ca serait cool et si on m'explique le principe en
| >> meme
| >> temps, ce serait en mieux ;-)
| >>
| >> D'avance, merci a tous !
| >>
| >> SELECT DISTINCT
| >> c.LIBELLE_CIVILITE,
| >> p.NOM_ADHERENT nom,
| >> nls_initcap(p.PRENOM_ADHERENT) prenom,
| >> nvl(a.LIGNE_ADRESSE_1,' ') ligne_adresse_1,
| >> nvl(a.LIGNE_ADRESSE_2,' ') ligne_adresse_2,
| >> nvl(a.LIGNE_ADRESSE_3,' ') ligne_adresse_3,
| >> nvl(a.LIGNE_ADRESSE_4,' ') ligne_adresse_4,
| >> nvl(a.LIGNE_ADRESSE_5,' ') ligne_adresse_5,
| >> HISTO_MATRICULE.NUMERO_MATRICULE matricule,
| >> p.NUMERO_ADHERENT
| >> FROM
| >> POSITION,
| >> SECTION,
| >> ADHERENT p,
| >> HISTO_MATRICULE,
| >> CIVILITE c,
| >> ADRESSE a,
| >> FAMILLE f,
| >> HISTO_FAMILLE,
| >> BLOCAGE_ADRESSE
| >> WHERE
| >> ( BLOCAGE_ADRESSE.CODE_BLOCAGE != 'M' OR
| >> BLOCAGE_ADRESSE.CODE_BLOCAGE !=
| >> '1' OR BLOCAGE_ADRESSE.CODE_BLOCAGE != '2' )
| >> AND ( HISTO_FAMILLE.NUMERO_BENEFICIAIRE=p.NUMERO_BENEFICIAIRE )
| >> AND ( HISTO_MATRICULE.NUMERO_FAMILLE=f.NUMERO_FAMILLE )
| >> AND ( c.CODE_CIVILITE=p.CODE_CIVILITE )
| >> AND ( a.NUMERO_ADRESSE=p.NUMERO_ADRESSE_ADHERENT )
| >> AND ( f.NUMERO_FAMILLE=HISTO_FAMILLE.NUMERO_FAMILLE )
| >> AND ( p.DATE_NAISSANCE_ADHERENT > '31/12/1980' AND
| >> p.DATE_NAISSANCE_BENEFICIAIRE < '01/01/1988' )
| >> AND ( HISTO_MATRICULE.DATE_FIN_MATRICULE is null )
| >> and (p.code_section = section.code_section)
| >> and ( POSITION.CODE_POSITION = 'AD' OR POSITION.CODE_POSITION =
| >> 'AP' OR
| >> POSITION.CODE_POSITION ='PM' )
| >> ORDER BY
| >> 2,3;
| >>
| >>
| >
| > Instead of your "OR" clause, which is always true, I think you want "AND":
| >
| > WHERE BLOCAGE_ADRESSE.CODE_BLOCAGE not in ('M', '1', '2')
| >
| > but my French could be a little rusty... ;-)
| >
|
| And more importantly, you are missing a number of join conditions in
| your WHERE clause, leading to cartesian joins. Michel Cadot,
| aidez-nous! Je quitte...
|
| -Mark Bole
|

Nothing to add you're perfectly right.
There must be some join condition between POSITION and ADHERENT and between BLOCAGE_ADRESSE and ADHERENT or ADRESSE. I don't think HISTO_FAMILLE is of any utility...

Btw, if DATE_NAISSANCE_ADHERENT and DATE_NAISSANCE_BENEFICIAIRE are of date datatype, you (Kevin) should use to_date for your constants: to_date('01/01/1988', 'DD/MM/YYYY').
If they are not of date type then the relational operators don't give you what you want.

Regards
Michel Cadot Received on Tue Feb 22 2005 - 11:56:28 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US