Requêtes croisées

Cette fonctionnalité est probablement la plus avancée, pratique et puissante !

Cas d'usage :

  • Comparer 2 bases de données pour contrôler leur intégrité
  • Récupérer les données issues de différentes Sources pour compléter un Datawarehouse
  • Créer un jeu de données unique, contenant des données en provenance de différents logiciels

Comment ça fonctionne

Comme toujours, cela commence par une requête simple.

Si on se place dans le contexte d'une base de données simple, et que nous voulons un SELECT contenant des données issues de plusieurs tables, nous allons utiliser les jointures (JOIN).

C'est plus ou moins comme ceci que les requêtes croisées fonctionnent.

Dans cet exemple, je vais vous présenter une requête croisée entre 3 bases de données sans lien, mais on peut également mixer avec des données issues de fichiers, webservices... N'importe quel type de connexion fonctionne !

  1. Créez une nouvelle requête. Celle-ci sera associée à une connexion MySQL. Un clic droit fait apparaître le menu contextuel :
Le menu contextuel des requêtes intègre un assistant pour les requêtes croisées.

2. Dans le menu, choisissez une nouvelle connexion :

Le menu de paramétrage d'une requête croisée

3. Le script sera automatiquement ajouté à la requête originale :

[-[12]] est le script qui signifie une requête croisée avec la connexion #12

4. Vous pouvez alors compléter la requête initiale par une autre, à la suite du script. Celle-ci sera associée à la base de données Postgres : la syntaxe Postgres s'applique. Un clic droit sur la requête pour ouvrir le menu contextuel :

Le menu contient maintenant une section "Requête croisée".

5. La requête croisée n'est pas quelque chose de magique : le lien entre les Sources s'effectue en utilisant les noms de champ identiques. Cela implique d'avoir des champs communs entre les requêtes.

5.1 Si vous n'avez pas de champs aux noms communs, vous pouvez utiliser les alias :

Première requête : SELECT id_sample, li_sample FROM mytable

Deuxième requête : SELECT mycolumn as id_sample, dt_date FROM mytable

5.2 Si vous voulez forcer le lien, le script peut être modifié :

Cette syntaxe vous permet de forcer le lien en choisissant les champs vous-même
Vous pouvez ajouter plusieurs champs : [-id_sample,id_another_field-[12]]

6. Vous pouvez contrôler le comportement d'une requête croisée dans le menu contextuel :

Le menu "Requête croisée" : Des informations sont disponibles pour vous aider à créer une requête fonctionnelle.

7. Vous pouvez aussi tester le lien. Fuzible testera les 2 requêtes séparément et contrôlera la syntaxe :

8. A présent, je vais ajouter une nouvelle requête jointe, utilisant une BDD MariaDB :

La nouvelle requête utilise un lien de type "Jointure Gauche".
Un alias est utilisé pour créer le lien avec le reste (FirstColumn -> id_sample)

9. Testons la requête en appuyant sur "F5" :

Le menu de consultation des résultats. Les données issues des 3 sources ont bien été récupérées et associées en utilisant les liens définis.

Requête croisée conditionnelle (fonction avancée)

Cas d'usage :

  • Contrôle d'intégrité entre 2 bases de données

Dans le cas ou vous ne voudriez récupérer que les différences qui existent entre 2 bases de données (ou autre Source), vous pouvez écrire une ou plusieurs condition(s) spéciale(s) dans la requête croisée. C'est ce que ferait une jointure OUTER filtrée dans le cas d'une requête entre plusieurs tables.

Un filtre a été ajouté au script de requête croisée

Sans le filtre, on récupèrerait toutes les lignes qui "matchent" entre les 2 Sources :

Résultats sans le filtre

Avec le filtre, on ne récupère que les lignes qui "matchent" conformément au filtre appliqué

Résultats avec le filtre
fr_FRFrench