BASE SQL fusion de 2 tables

Bonjour

Voici une nouvelle question envoyée à l'aide du formulaire de demande d'aide (http://fr.libreoffice.org/get-help/poser-une-question/).
Si vous répondez, merci de penser à utiliser la fonction "répondre à tous" de votre logiciel de courrier électronique de façon que le demandeur reçoive une copie de votre réponse.

Email:: jpf.bourse@free.fr
Sujet:: BASE SQL fusion de 2 tables
OS:: Windows 7
Version:: 6.0.x
Question:: Bonjour aux experts,
Je voudrais concaténer plusieurs tables.
J'ai 3 tables T1, T2 et T3 de structures différentes chacune avec un champ identifiant (de contenu et de format différent).
Je voudrais obtenir une VUE (ou une table) contenant une seule colonne mais avec la totalité des identifiants des 3 tables pour avoir une "master" table contenant toutes les références.
J'ai tenté bcp de choses en vain.
Merci de tous vos conseils.
JP

----- Mail original -----

De: "demande aide fr" <demande_aide_fr@libreoffice.org>
À: users@fr.libreoffice.org
Envoyé: Mardi 24 Avril 2018 16:41:36
Objet: [fr-users] BASE SQL fusion de 2 tables

Bonjour

Voici une nouvelle question envoyée à l'aide du formulaire de demande
d'aide (http://fr.libreoffice.org/get-help/poser-une-question/).
Si vous répondez, merci de penser à utiliser la fonction "répondre à
tous" de votre logiciel de courrier électronique de façon que le
demandeur reçoive une copie de votre réponse.

Email:: jpf.bourse@free.fr
Sujet:: BASE SQL fusion de 2 tables
OS:: Windows 7
Version:: 6.0.x
Question:: Bonjour aux experts,
Je voudrais concaténer plusieurs tables.
J'ai 3 tables T1, T2 et T3 de structures différentes chacune avec un
champ identifiant (de contenu et de format différent).
Je voudrais obtenir une VUE (ou une table) contenant une seule
colonne mais avec la totalité des identifiants des 3 tables pour
avoir une "master" table contenant toutes les références.
J'ai tenté bcp de choses en vain.
Merci de tous vos conseils.
JP

bonjour,

faire quelques recherches sur hsqldump into csv :

http://www.hsqldb.org/doc/util-guide/util-guide.html

https://stackoverflow.com/questions/8059748/how-to-export-and-restore-hsqldb
et de csv passer en innodb ( mariadb) avec odbc

apt-cache search odbc mariadb
libreoffice-mysql-connector - extension de connecteur MariaDB/MySQL pour LibreOffice
mariadb-plugin-connect - moteur de stockage Connect pour MariaDB

le plus facile à faire :

installer un linux (opensuse 32bits) dans virtualbox

slt
bernard

Bonjour,
A la base ça ressemble à ce que fait une UNION en langage SQL.

Bonsoir,

Vous pouvez faire une série de requêtes UNION.

Par exemple pour créer une Vue, saisissez quelque chose comme :

CREATE VIEW "VueGlobale" AS
SELECT "IDClient" FROM "tblClients" UNION
SELECT "IDFourniture" FROM "tblFournitures";

Dans Outil - SQL de votre base de données HSQLDB.

Il est clair que chaque requête doit comporter le nombre de colonnes de la Vue, quitte à y mettre un NUL.

Vous pouvez aussi faire une requête simple et exploiter ses résultats par une macro, par exemple, ou dans un formulaire (mêmes instructions, sans le CREATE VIEW).

C'est lent, mais ça fonctionne sans souci.

Thierry

Bonsoir,

+1 pour les requêtes union mais je pense qu'il faut aussi "formater" les
champs qui y sont car (si j'ai bon souvenir), union exige le même format
pour les colonnes respectives sélectionnées.
Et comme dans l'énoncé, il est dit de format différent, il faudra peut-être
reformater les champs de la même manière (caractère/entier/etc) lors du
select :wink:
un exemple serait le bienvenu :wink:

Yves

Bonjour,
Pour créer une vue, il faut mettre les trois Tables en Relation.
Une Relation ne peut s'établir qu'entre champs de même propriété, INTEGER avec INTEGER, ou TEXT avec TEXT.

Jean-Michel PIERRE
Tél : 06.19.55.73.22

Bonsoir,

Mais non, on peut construire une vue soit sur un sous-ensemble de colonnes d'une table unique, soit en créant une intersection entre plusieurs tables en associant leurs clés, soit en général à partir de n'importe quel ensemble de données résultant d'une requête (SELECT). La structure de la vue correspondra à la structure des colonnes prises de la requête.
Dans le cas particulier de l'UNION entre requêtes, comme le précisait un intervenant, la structure de chaque sous-requête doit être cohérente avec les autres (le nombre, le type et l'ordre des colonnes doivent être cohérents), si nécessaire en faisant les CAST AS appropriés.
JP précise bien qu'il cherche à regrouper les identifiants de chacune de ses tables en une seule colonne d'une seule table ou d'une vue. Il devra donc éventuellement CASTer ses identifiants pour permettre l'UNION des result-sets.
En tout cas c'est ce que j'ai compris de son besoin.

Thierry

Bonsoir,

Bonjour,
Pour créer une vue, il faut mettre les trois Tables en Relation.
Une Relation ne peut s'établir qu'entre champs de même propriété, INTEGER
avec INTEGER, ou TEXT avec TEXT.

Ok mais rien ne t'empêche de faire un cast sur une propriété pour lui
donner un autre type :wink:
moyennant que cette propriété puisse se convertir vers le nouveau type sans
problème...
ex: colonne_integer = cast(colonne_texte as Integer)

Bonjour,

Il n'y a aucune raison pour que la création de la Vue échoue. Je viens de le vérifier en créant deux tables nommées comme les vôtres (à peu près), puis en exécutant l'instruction, tout va bien, je vous mets la copie d'écran en annexe.

N'oubliez pas pour faire apparaître la nouvelle vue (ou n'importe quelle table que vous créeriez directement dans l'interface SQL) de faire Affichage - Actualiser les Tables.

Par contre le UNION équivaut à un SELECT DISTINCT c'est à dire que vous ne verrez apparaître qu'une seule fois une valeur. Si vous avez le même identifiant dans chacune des tables d'origine, il n'apparaîtra qu'une fois dans la table résultat.

On peut obtenir le même résultat en utilisant une table conventionnelle ainsi :

INSERT INTO "tblResultat" ("ID") SELECT "X1" FROM "TX" UNION SELECT "Y1" FROM "TY";

Bien sûr il est possible d'écrire plusieurs requêtes INSERT-SELECT successives si on veut vraiment obtenir les identifiants redondants, à condition qu'il n'y ait pas de contrainte d'unicité sur la colonne (ID dans l'exemple). Ca vous fait :

INSERT INTO "tblResultat" ("ID") SELECT "X1" FROM "TX";
INSERT INTO "tblResultat" ("ID") SELECT "Y1" FROM "TY";

Là.vous aurez tout le monde

Bonne fin de journée,

Thierry

Bonjour,

Merci à tous pour vos réponses.
J'ai mis en application vos conseils, le SELECT UNION fonctionne seul mais pas avec le CREATE VIEW. Voici mon code :

SELECT "X1" FROM "TX" UNION SELECT "Z1" FROM "TZ
ce code fonctionne mais ce n'est qu'un requête et ça ne me permet pas de créer une vue

CREATE VIEW "VA" AS SELECT "X1" FROM "TX" UNION SELECT "Z1" FROM "TZ"
ce code ne fonctionne pas "erreur de syntaxe dans l'expression SQL"

CREATE VIEW "VA" ("V1") AS SELECT "X1" FROM "TX" UNION SELECT "Z1" FROM "TZ"
ce code ne fonctionne pas "impossible de charger le contenu des données"

Vous avez compris j'ai 2 tables TX et TZ, TX avec les champs X1 .... et TZ avec les champs Z1 ...... et je voudrais une table ou une vue VA avec un champ V1 qui contienne tous les X1 et Z1.
Merci encore de vos prochains retours.

Cordialement,
Jean-Pierre FONTANGE

-----Message d'origine-----