Sqlite ATTACH : pour travailler sur plusieurs base de données

Anne sqlite

Attacher les base

Pour ouvrir plusieurs bases de données, il faut utiliser ATTACH de la façon suivante :

ATTACH "fichier1.db" AS db1;
ATTACH "fichier2.db" AS db2;

Il y a une limite au nombre de bases que l’on peut ouvrir simultanément, mais si besoin, on peut en fermer avec DETACH avant d’en ouvrir de nouvelles.

On suppose par la suite que les deux bases ont une table tbl ayant la même structure.

Union des lignes

On peut alors faire :

SELECT Nom
  FROM (
    SELECT * FROM db1.tbl
    UNION
    SELECT * FROM db2.tbl
    )
  WHERE ...
  GROUP BY Nom
  HAVING (SUM(Resultat = "failed")) > 0
  ORDER BY Nom
;
  • l’opération UNION permet d’avoir la liste des lignes des deux tables. Comme elles ont les mêmes colonnes, ça ne pose pas de problèmes ;
  • la clause WHERE permet éventuellement de ne garder que les lignes qui nous intéresse ;
  • on regroupe ensuite les lignes ayant le même Nom à l’aide de GROUP. On peut regrouper sur les valeurs de plusieurs colonnes si besoin ;
  • HAVING permet d’exprimer une propriété sur les groupes à sélectionner. Ici, on sélectionne seulement des groupes qui ont au moins une valeur failed dans la colonne des résultats.
  • enfin ORDER BY permet de trier les résultats.

Fusion des lignes

On peut aussi préférer fusionner les lignes avec JOIN :

SELECT f1.Nom, f1.Resultat as Resultat_1, f2.Resultat as Resultat_2
  FROM (db1.tbl as f1 JOIN db2.tbl as f2
        WHERE f1.Nom = f2.Nom)
;

Cette fois, on n’aura qu’une seule ligne par Nom, avec des colonnes provenant des deux tables.

Voir aussi :