#1 Wed 04 September 2013 15:40
- jpsurf
- Participant occasionnel
- Date d'inscription: 11 Jun 2008
- Messages: 23
[mapinfo 10.0] jointure entre deux tables
Bonjour à tous,
j'ai un petit problème sous mapinfo que je n'arrive pas à résoudre. J'ai deux tables que j'essaye de joindre via une requete sql.
la première, table1, est composée des champs :
- code_canton (texte - 2 caractères)
- code_dep (texte - 2 caractères)
- obj
Il s'agit d'une table géographique
la deuxième, table2, possède les champs :
- id_canton (texte -4 caractères) correspondant à la concatenation des champs code_dep et code_canton de table1
- donnee1
- ...
je souhaite via une requete sql joindre la colonne donnee1 de la table 2 à la table 1
J'ai essayé pas mal de chose qui ne marchent pas (message d'erreur de jointure) dont :
Code:
SELECT table1.code_canton, table1.code_dep, table2.donnee1 FROM table1, table2 WHERE table1.code_canton=right$(table2.id_canton,2) AND table1.code_dep=left$(table2.id_canton,2)
ou encore
Code:
SELECT table1.code_canton, table1.code_dep, table2.donnee1 FROM table1, table2 WHERE table1.code_dep+table1.code_canton=table2.id_canton
Est-il possible de faire une telle jointure et si oui comment pratique t'on ?
Merci d'avance pour votre aide
Dernière modification par jpsurf (Wed 04 September 2013 16:01)
Hors ligne
#2 Wed 04 September 2013 16:10
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: [mapinfo 10.0] jointure entre deux tables
Salut,
Pourquoi ne pas créer un champ supplémentaire dans ta table1 qui sera la concaténation de code_canton & code_dep ?
Puis -->
Code:
Select * from Table1, Table2 where Table1.NoveauChamp=Table2.Id_Canton into Resultat
Tes tables jointes seront dans la table "Resultat"
Une question --> Quel est le libellé message d'erreur?
A+
Joël
Dernière modification par Spacejo (Wed 04 September 2013 16:59)
Hors ligne
#3 Wed 04 September 2013 22:42
- jpsurf
- Participant occasionnel
- Date d'inscription: 11 Jun 2008
- Messages: 23
Re: [mapinfo 10.0] jointure entre deux tables
Tout d'abord merci pour ta réponse.
Je ne souhaite pas créer un nouveau champ par pure fainéantise . Non, plus sérieusement l'objectif pour moi est de livrer un .wor à un utilisateur mapinfo qui ne possède pas les droits de modification sur la table, c'est pour ça que je partais plus sur une solution requete SQL et non vers un ADD COLUMN...
Je n'ai pas mapinfo sous la main mais le message d'erreur était du genre "critère de jointure incorrecte dans la clause where".
Dernière modification par jpsurf (Wed 04 September 2013 23:08)
Hors ligne
#4 Thu 05 September 2013 09:50
- jpsurf
- Participant occasionnel
- Date d'inscription: 11 Jun 2008
- Messages: 23
Re: [mapinfo 10.0] jointure entre deux tables
De retour devant mapinfo voici les précisions sur le message d'erreur :
Aucune jointure n'est spécifiée entre les tables 'table1' et 'table2'. Condition de jointure non valide dans la clause where
Hors ligne
#5 Thu 05 September 2013 13:36
- Damien BEAUSEIGNEUR
- Participant assidu
- Lieu: meyzieu
- Date d'inscription: 5 Sep 2005
- Messages: 425
Re: [mapinfo 10.0] jointure entre deux tables
Bonjour,
Une petite question la deuxième table est elle une table géographique?
si oui table1.obj intersects table2.obj devrait être utile.
Sinon il faut passer par une query, une petite sélection préalable soit pour couper le champ id_canton en 2, soit pour concaténer les champs code_canton et code_dep en 1 seul.
il est possible de faire
Code:
select code_canton, code_dep, code_dep+code_canton as id_canton from table1 into selection1
et ensuite de se servir de selection1 pour faire la jointure entre la table1 et la table 2.
Code:
SELECT table1.code_canton, table1.code_dep, table2.donnee1 FROM table1, table2, selection1 WHERE table1.code_dep = selection1.code_dep and table1.code_canton= selection1.code_canton and table2.id_canton=select1.id_canton
La jointure étant directe elle sera donc considérée comme valide.
cordialement
Dernière modification par Damien BEAUSEIGNEUR (Thu 05 September 2013 13:36)
Hors ligne
#6 Thu 05 September 2013 18:54
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: [mapinfo 10.0] jointure entre deux tables
Salut,
Dans un .wor un "Add column" te crée une colonne temporaire (peut être une solution ) et non un "Alter Table" qui te crée une colonne permanente.
Dans ton .wor tu pourrais créer une colonne temporaire (concaténation de tes 2 champs puis jointure).
Lors de la fermeture de tes tables --> elles se retrouvent leurs états initiales.
A consulter à ce sujet ---> http://www.google.fr/url?sa=t&rct=j … mp;cad=rja
En espérant orienter tes recherches
A+
Joël
Hors ligne
#7 Thu 05 September 2013 21:27
- jpsurf
- Participant occasionnel
- Date d'inscription: 11 Jun 2008
- Messages: 23
Re: [mapinfo 10.0] jointure entre deux tables
Merci à vous deux pour ces propositions, je vais les essayer dès demain matin et vous ferai un retour.
Pour Damien, ma deuxième table n'est pas géographique
Hors ligne
#8 Fri 06 September 2013 08:54
- jpsurf
- Participant occasionnel
- Date d'inscription: 11 Jun 2008
- Messages: 23
Re: [mapinfo 10.0] jointure entre deux tables
pour la solution que tu m'as proposée Spacejo, j'ai essayé de faire :
Code:
Add column table1 (id_canton char(5)) From table1 Set to code_dep+code_canton Select * from table1, table2 where table1.id_canton=table2.id_canton into Selection
Le ADD COLUMN marche très bien mais la jointure entre le champ temporaire créé dans table1 et le champ dans table2 ne fonctionne pas. Le SELECT me renvoie le même message "Aucune jointure n'est spécifiée..."
pour la solution de Damien, même résultat.
là je commence à bloquer.
J'ai peut-être une autre piste : créer un mbx qui copiera la table "table1" en dur sur le poste de la personne qui utilisera le .wor, ajouter en dur un colonne a cette table et la remplir par la concaténation du champ code_dep et code_canton. J'intégrerai le mbx dans le wor avec un RUN APPLICATION
Dernière modification par jpsurf (Fri 06 September 2013 08:54)
Hors ligne
#9 Fri 06 September 2013 10:14
- nicoboud
- Membre
- Lieu: Nantes
- Date d'inscription: 12 Oct 2007
- Messages: 860
Re: [mapinfo 10.0] jointure entre deux tables
Bonjour,
Je confirme malheureusement ces limitations de Mi : une jointure ne peut se faire sur des champs temporaires, ni sur une combinaison de champs.
La solution de la copie en local de ladite table devrait fonctionner.
Mais je reprends la première question qu'avait posé Spacejo dans le post #2 :pourquoi ne pas rajouter définitivement ce champ résultat de concaténation à la table initiale ?
Nicolas.
Co-modérateur du forum Mapinfo
Utilisateur Mapinfo et QGIS
Hors ligne
#10 Fri 06 September 2013 12:04
- jpsurf
- Participant occasionnel
- Date d'inscription: 11 Jun 2008
- Messages: 23
Re: [mapinfo 10.0] jointure entre deux tables
Pour plusieurs raisons :
1) cela demande de recréer ce champ à chaque nouvelle livraison
2) si monsieur X a besoin de tel champ concaténer que monsieur Y a besoin d'un autre champ concatener et ainsi de suite on en finit pas.
donc non je ne veux pas créer un champ avec la concatenation en dur.
Dernière modification par jpsurf (Fri 06 September 2013 12:05)
Hors ligne
#11 Fri 06 September 2013 15:13
- nicoboud
- Membre
- Lieu: Nantes
- Date d'inscription: 12 Oct 2007
- Messages: 860
Re: [mapinfo 10.0] jointure entre deux tables
Donc si vous avez X monsieurs, vous allez créer X fois un un mbx dédié ?
Co-modérateur du forum Mapinfo
Utilisateur Mapinfo et QGIS
Hors ligne
#12 Fri 06 September 2013 17:36
- jpsurf
- Participant occasionnel
- Date d'inscription: 11 Jun 2008
- Messages: 23
Re: [mapinfo 10.0] jointure entre deux tables
mais j'en ai pour l'instant qu'un et je pense qu'il sera le seul
Hors ligne
#13 Fri 06 September 2013 18:01
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: [mapinfo 10.0] jointure entre deux tables
En respectant ton cahier des charges et s'en se lancer dans la création d'un .mbx.
Tu peux toujours créer un .wor avec:
Ouverture de table1, Table2
Création d'une table Table1Temp "save as de Table1"
Création du champ servant de jointure
Incrémentation de celui ci
Jointure
Ouverture de TablesJointes
Puis lors de la fermeture on efface TableTemp
Celà oblige à travailler toujours dans le même dossier et avoir toujours les mêmes noms de table pour Table1 et Table2.
A+
Joël
Hors ligne