#1 Tue 18 December 2007 09:27
- rastamath69
- Juste Inscrit !
- Lieu: Lyon
- Date d'inscription: 18 Dec 2007
- Messages: 8
[MapBasic] Fusionner deux table mapInfo
Bonjour,
je débute sur MapInfo (version 7.8), et j'aurais souhaité faire fusionner deux tables.
Je m'explique, ces deux table ont la même structure toutes les deux (les mêmes colonnes), elles ont certaines données en commun, et chacune d'elle a des données en plus que l'autre n'a pas.
Mon but: faire une seule table sans faire de redondance d'informations.
J'ai bien vu une commande "create object as union", mais je ne suis pas sur qu'elle réponde à mon besoin.
Merci d'avance!
Bonne journée.
MATH
Hors ligne
#2 Tue 18 December 2007 09:36
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: [MapBasic] Fusionner deux table mapInfo
Bonjour
S'il s'agit d'ajouter des données attributaires, une suite de sélections et de mise à jour de celles-ci suffira
S'il s'agit des objets graphiques, le plus simple est de passer par la sélection des objets communs (dans n'importe quelle table) puis d'inverser la sélection et enfin d'ajouter (menu TAble-> Ajouter) cette sélection à l'autre table
Si c'est un mélange des deux il faut faire ces deux manip' l'une après l'autre
Hors ligne
#3 Tue 18 December 2007 10:09
- rastamath69
- Juste Inscrit !
- Lieu: Lyon
- Date d'inscription: 18 Dec 2007
- Messages: 8
Re: [MapBasic] Fusionner deux table mapInfo
Merci pour ta réponse très rapide!! :-)
je ne comprend pas très bien la différence entre des objets graphiques et non graphiques? Je veux dire que mes tables me permettent d'avoir un graphique (menu fenêtre -> Carte) mais également des tableaux concrets de données (menu fenêtre -> Données). cela fait-il une différence dans les requêtes que je dois exécuter??
Sinon pour faire une sélection des données communes que ces deux tables ont, je pense pouvoir me débrouiller avec un "intersects", mais par contre je ne sais pas faire la sélection inversée (pour sélectionner dans chaque table les données qui ne sont pas dans l'intersection), ce qui effectivement me simplifierai grandement la vie...
MATH
Hors ligne
#4 Tue 18 December 2007 10:49
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: [MapBasic] Fusionner deux table mapInfo
La différence est bien celle que tu dis. Là il s'agit de tables "complètes" (graphique+données, avec une ligne de données par graphique). Mais quand tu parles de "données en commun", parles tu d'objets graphiques communs ou de données attributaires communes ??
S'il s'agit de graohiques (formes) communs et que ce sont des polygones, le critère à utiliser est 'entirely within' et pas 'intersects' et pour être sûr que les objets sont vraiment les mêmes il faudrait ajouter ET surfaces égales ET mêmes périmètres...
L'inversion de la sélection est accessible par le menu Selection
ps: l'autre cas de figure ce sont des objets identiques dans les deux tables mais des attributs (données) différents (une moitié remplis dans une table et l'autre moitié remplis dans l'autre table, par exemple)
Hors ligne
#5 Tue 18 December 2007 15:17
- rastamath69
- Juste Inscrit !
- Lieu: Lyon
- Date d'inscription: 18 Dec 2007
- Messages: 8
Re: [MapBasic] Fusionner deux table mapInfo
Je suis bien dans l'autre cas de figure, j'ai des objets identiques mais pas les mêmes attributs...
J'ai fini par comprendre que visiblement les opérateurs tels que Intersects ou Contains ne s'appliquaient qu'à des types d'objet graphique (ils s'appuyent sur des coordonnées pour inclurent ou exclurent les données à sortir)
Donc effectivement ce n'est pas de ça dont j'ai besoin, il faudrait que j'arrive à construire des requêtes mapBasic qui me permettent d'isoler des ensembles de données (par exemple construire une table contenant uniquement les données communes à mes deux tables de départ),
et là, je bloque...
MATH
Hors ligne
#6 Tue 18 December 2007 16:28
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: [MapBasic] Fusionner deux table mapInfo
Il s'agit de requête SQL (pas MapBasic...)
Ce sra plus ou moins facile suivant s'il y a, dans chacune des tables, une colonne servant d'identifiant unique...ou pas.!
Est-ce le cas ??
Hors ligne
#7 Tue 18 December 2007 17:23
- rastamath69
- Juste Inscrit !
- Lieu: Lyon
- Date d'inscription: 18 Dec 2007
- Messages: 8
Re: [MapBasic] Fusionner deux table mapInfo
Normalement il y a un identifiant unique mais là, cet identifiant pourra être dédoublé...
Pour être plus clair, je travaille avec des tables contenant des communes.
Les deux tables dont je parle sont:
1) celle que mes utilisateurs peuvent modifier (par exemple ils peuvent couper une commune en deux: CHAMBERY devient CHAMBERY_NORD et CHAMBERY_SUD) C'est dans ce cas où mon identifiant unique de commune se dédouble.
2) et celle qui peut m'être fournie afin de faire une mise à jour (elle peut donc contenir des nouvelles communes que je n'avais pas avant).
Mon but est donc de faire fusionner ces deux tables de sorte à avoir les communes non changées, les nouvelles et d'intégrer les moficiations faites par mes utilisateurs.
Là je viens de passer l'après-midi à essayer diverses requêtes de type SQL pour isoler par exemple tous mes identifiants qui ne seraient plus unique mais MapBasic ne semble pas accepter toutes les formes de requêtes SQL...
MATH
Hors ligne
#8 Tue 18 December 2007 17:40
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: [MapBasic] Fusionner deux table mapInfo
Aïe...ça se complique !!
Il est tard et je vais prendre le temps de réfléchir
Quand même, pour l'identifiant unique (le code INSEE qui risque d'être deux fois le même dans l'exemple cité) on peut utiliser
Code:
Select INSEE, Count(*) "nombre" from COMMUNE group by INSEE order by COL2 Desc into occurence
Le tableau obtenu permet d'identifier en haut de liste les INSEE dédoublés...ou pire !
Hors ligne
#9 Tue 18 December 2007 23:31
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: [MapBasic] Fusionner deux table mapInfo
Bon, dans l'ordre et en utilisant la fenêtre MapBasic=FMB (voir ici la rubrique "documents spécifiques"):
Je suppose que le code INSEE est en COL1 et que toutes les colonnes suivantes, de 2 à n, sont à mettre à jour
Je suppose aussi qu'on remplit des cellules vides de table_utilisateur par les infos correspondantes de table_fournisseur (et pas qu'on met à jour - change - leur contenu existant)
1- sélection des communes de la table utilisateur qui figurent aussi dans la table fournisseur ET qui ont une COL2 vide (ou nulle si c'est du nombre), puis mise à jour de COL2 de la sélection par les valeurs de COL2 de table_fournisseur (ici par la FMB, sinon menu Table->Mettre à jour colonne)
Code:
select * from table_utilisateur,table_fournisseur where table_utilisateur.INSEE=table_fournisseur.INSEE And table_utilisateur.COL2="" into sel1 Add Column "sel1" (COL2) From table_fournisseur Set To COL2 Where COL1 = COL1
2- mise à jour des n autres colonnes une par une
mêmes commandes en passant sur les deux lignes de COL2 à COL3, COL4, ...COLn
3- enregistrer table_utilisateur
On a maintenant dans table_utilisateur toutes les infos qui y étaient déjà, plus les infos de table_fournisseur qui ont le même INSEE
4- sélectionner les éléments de table_fournisseur qui ne sont pas dans table_utilisateur
Code:
select * from table_fournisseur where NOT INSEE=any (select INSEE from table_utilisateur) into sel2
5- ajouter sel2 à table_utilisateur (menu Table->Ajouter)
6- enregistrer table_utilisateur
7- traiter "à la main" le cas des communes dédoublées (sélection par la requête donnée dans le post précédent): pour l'instant elles ont le même identifiant et les mêmes données là où leurs colonnes étaient vides (en particulier, leur donner un identifiant unique)
La table_utilisateur a maintenant toutes les informations disponibles (et peut être copiée en table_fournisseur pour retour)... ouf !!!
ps: dans la FMB on sélectionne plusieurs lignes de commande puis 'enter'...et tout s'exécute !! Une fois la manip' au point, il serait prudent de copier le contenu des lignes de la FMB: il suffira la fois suivante de coller toutes ces lignes et tout sera 'rejoué' en un seul 'enter'
Hors ligne
#10 Wed 19 December 2007 09:27
- rastamath69
- Juste Inscrit !
- Lieu: Lyon
- Date d'inscription: 18 Dec 2007
- Messages: 8
Re: [MapBasic] Fusionner deux table mapInfo
Merci beaucoup pour le temps que tu as consacré à mon problème!!
j'ai persévéré hier soir, mais pas jusqu'à 23h30 , et j'étais arrivé à me dépêtrer en faisant des tours de passe-passe à travers plusieurs tables afin d'isoler les données dont j'avais besoin, mais avec les requêtes que tu viens de me créer, je pense que je vais pouvoir faire quelque chose de plus propre!!!
Merci encore pour ton aide précieuse!
MATH
PS: ceci n'etait qu'une partie des traitements que j'ai à mener, je serais peut-être amené à repasser dans le coin si j'avais besoin d'aide!
Hors ligne