banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Mon 25 May 2009 20:44

sdauphin
Participant occasionnel
Date d'inscription: 30 Aug 2009
Messages: 20

jointure inverse ?

Bonjour,

J'ai deux tables (TABLE1, TABLE2) contenant une colonne "COL_ROWID" (numéro de ligne de TABLE1), la deuxième "TABLE2" est la table ou je mets le résultat de sélections successives, elle est construite à partir des objets de TABLE1.

Je veux faire une sélection d'objets (des lignes) de la TABLE1 qui remplisse 2 conditions :
- que les object touchent une zone (un cercle de diamètre donné)
- que les valeurs "COL_ROWID" de TABLE1 ne soit pas déjà dans TABLE2.

J'ai essayé des choses comme ça, ça ne fonctionne pas :

Code:

Select COL_ROWID From TABLE1 Where TABLE1.COL_ROWID<>TABLE2.COL_ROWID

Pour la premiere condition pas de pb, elle est du type :

Code:

Select COL_ROWID From TABLE1 Where obj Intersects CreateCircle(X,Y, 0.5)

Comment combiner les deux, j'ai cru comprendre en parcourant le forum que la jointure inverse entre table n'était pas possible, Comment peut on contourner le probleme ?

je suis sur MapInfo 8.5.

merci à vous.

Stéphane

Hors ligne

 

#2 Mon 25 May 2009 21:46

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: jointure inverse ?

Bonjour
Sans garantie (avec usage de AND pour "lier" les deux conditions)

Code:

Select * From TABLE1 Where obj Intersects CreateCircle(X,Y, 0.5) And Not COL_ROWID = any (Select COL_ROWID From TABLE2)

ou And COL_ROWID <> any (Select COL_ROWID From TABLE2)...

Hors ligne

 

#3 Tue 26 May 2009 09:09

diophamidou
Participant assidu
Date d'inscription: 18 Jan 2006
Messages: 243

Re: jointure inverse ?

Maurice a écrit:

Bonjour
Sans garantie (avec usage de AND pour "lier" les deux conditions)

Code:

Select * From TABLE1 Where obj Intersects CreateCircle(X,Y, 0.5) And Not COL_ROWID = any (Select COL_ROWID From TABLE2)

ou And COL_ROWID <> any (Select COL_ROWID From TABLE2)...


Est ce que dans le from il ne faudrait pas aussi rajouter TABLE2?

Hors ligne

 

#4 Tue 26 May 2009 10:44

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: jointure inverse ?

Cette syntaxe, qui utilise une sous-sélection, permet de n'obtenir que les attributs de TABLE1 et ne fait appel à TABLE2 que dans la sous sélection
Ceci dit pour le cas général: la syntaxe proposée n'a pas été testée ...!!

Hors ligne

 

#5 Tue 26 May 2009 13:28

sdauphin
Participant occasionnel
Date d'inscription: 30 Aug 2009
Messages: 20

Re: jointure inverse ?

Voila c'est testé.... et ça fonctionne bien pour la premiere proposition de Maurice

Code:

Select * From TABLE1 Where obj Intersects CreateCircle(X,Y, 0.5) And Not COL_ROWID = any (Select COL_ROWID From TABLE2)

Mais pas pour la deuxième, ou l'exclusion ne fonctionne pas.

Code:

....And COL_ROWID <> any (Select COL_ROWID From TABLE2)

Chapeau et merci

Dernière modification par olreb (Tue 26 May 2009 13:29)

Hors ligne

 

#6 Tue 26 May 2009 13:55

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: jointure inverse ?

Cas général aussi: le SQL MapInfo préfère le "Not égal" au "différent de"...(en fait c'est un fan du =, même précédé de Not !!)

Hors ligne

 

#7 Tue 26 May 2009 14:55

sdauphin
Participant occasionnel
Date d'inscription: 30 Aug 2009
Messages: 20

Re: jointure inverse ?

c'est des subtilités qu'il est bon de savoir !
que de temps perdu avec ce genre d'astuces...

Hors ligne

 

Pied de page des forums

Powered by FluxBB