Comment interroger plusieurs bases et environnements dans la même requête SQL ?

Interrogez des tables d’autres projets ou environnements dans la même requête, y compris entre PostgreSQL et MySQL. Vous n’avez pas besoin d’un DB Link sur le serveur.

Croiser des données de deux bases, ou regarder une table de Production alors que l’onglet est en préproduction, sort souvent de l’éditeur. Dans beaucoup de clients SQL, cela finit en export CSV, en script à part ou en DB Link sur le serveur.

Un DB Link demande une configuration et des privilèges supplémentaires sur le serveur, et il échoue souvent quand les bases sont d’autres technologies, comme PostgreSQL et MySQL.

Kerry Studio laisse interroger la table de l’autre connexion dans la même requête. Il suffit de définir un alias SQL sur le projet et de référencer la table distante comme @projet.table, par exemple @billing.orders.

À l’exécution, Kerry va chercher les lignes par la connexion enregistrée et les place dans une table temporaire sur la connexion de l’onglet. Le JOIN tourne là, sans DB Link et sans rien installer sur le serveur. La même syntaxe vaut entre PostgreSQL et MySQL.

Vous croisez les données dans l’éditeur, sans quitter la requête.

Comment définir l’alias

L’alias vit sur le projet, dans le champ Alias SQL (@alias). Sans ce nom, l’éditeur n’a rien à résoudre dans le jeton.

Il vous faut un workspace ouvert, un projet avec le champ renseigné et un onglet SQL.

  1. Dans la boîte de dialogue Nouveau projet ou Modifier le projet, saisissez l’alias, par exemple billing. Le @ n’entre pas dans le champ. Il n’apparaît que dans le SQL.
  2. Connectez l’onglet au projet et à l’environnement dans lequel la requête doit s’exécuter.
  3. Dans l’éditeur, écrivez @projet.table à la place de la table distante, par exemple @billing.public.orders.
  4. Exécutez. Kerry va chercher les lignes et construit la temporaire sur la connexion de l’onglet.

La palette (⌘K / CtrlK) → Nouvelle connexion ouvre la même boîte de dialogue de projet.

Comment écrire l’alias dans le SQL

Il y a deux façons d’écrire l’alias.

@projet.table, par exemple @billing.orders, utilise l’environnement de l’onglet. Avec un schéma, le chemin est celui du moteur : @billing.public.orders.

@projet:environnement, par exemple @billing:production, utilise cet environnement même si l’onglet est sur un autre. Le : se place seulement entre l’alias et l’environnement. Le reste continue avec . : @billing:production.public.orders.

Schéma, table et colonne utilisent ., jamais :. Correct : @billing.public.orders, @billing:production.public.orders. Incorrect : @billing:production:public.orders.

@nom tout seul, sans .table et sans :environnement, est une variable utilisateur MySQL (SET @s). Ce n’est pas un alias.

C’est vous qui définissez @…, sur le projet. L’alias doit être unique parmi les projets enregistrés. Après @projet: l’éditeur liste les environnements de ce projet. Après @projet:environnement. il liste schémas et tables de cette connexion.

L’alias ne change pas le sélecteur de projet de l’onglet. Il choisit seulement d’où viennent ces lignes. Si le nom dans le SQL n’est pas un projet enregistré, l’éditeur marque le jeton et l’exécution échoue avec le nom demandé par la requête.

Deux projets dans la même requête

Un cas fréquent : l’onglet sur une base de commandes, et les clients dans un autre projet déjà enregistré.

sql
-- Onglet sur le projet shop, environnement Préproduction.
-- @shop.public.orders suit l’onglet.
-- @crm.public.customers va chercher l’autre projet, sur l’environnement de l’onglet.

SELECT
  o.id,
  o.status,
  c.email
FROM @shop.public.orders o
JOIN @crm.public.customers c
  ON c.id = o.customer_id
WHERE o.created_at > current_date - 7;

Si crm est MySQL et que l’onglet est sur PostgreSQL, le schéma est le même. Kerry va chercher les lignes et le JOIN reste sur la connexion de l’onglet.

Préproduction et Production dans la même requête

Quand l’onglet est en Préproduction et que vous voulez la même table en Production, figez l’environnement dans le jeton.

Dans le SQLOnglet surKerry va chercher dans
@shop.public.ordersPréproductionPréproduction du projet shop
@shop:production.public.ordersPréproductionProduction du projet shop
sql
-- Onglet sur le projet shop, environnement Préproduction.

SELECT
  h.id,
  h.status AS status_preproduction,
  p.status AS status_production
FROM @shop.public.orders h
JOIN @shop:production.public.orders p
  ON p.id = h.id
WHERE h.status <> p.status;

Si vous changez seulement l’environnement de l’onglet, la requête dans l’éditeur reste la même. Ce qui change, c’est le jeton sans :environnement, parce qu’il suit l’onglet. Le jeton avec :production continue de pointer vers Production.