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: Mark Bole <makbo_at_pacbell.net>
Date: Tue, 22 Feb 2005 04:45:34 GMT
Message-ID: <ONySd.10009$DC6.2313@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 Received on Mon Feb 21 2005 - 22:45:34 CST

Original text of this message

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