#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 ?
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