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