Wie frage ich mehrere Datenbanken und Umgebungen in derselben SQL-Abfrage ab?
Fragen Sie Tabellen anderer Projekte oder Umgebungen in derselben Abfrage ab, auch zwischen PostgreSQL und MySQL. Ein DB Link auf dem Server ist nicht nötig.
Daten aus zwei Datenbanken zu kreuzen, oder eine Tabelle aus Produktion zu lesen, während der Tab in Vorproduktion steht, holt Sie meist aus dem Editor. In vielen SQL-Clients endet das in CSV-Export, einem Extra-Skript oder einem DB Link auf dem Server.
Ein DB Link braucht extra Konfiguration und Rechte auf dem Server, und er scheitert oft, wenn die Datenbanken unterschiedliche Technologien sind, etwa PostgreSQL und MySQL.
Kerry Studio lässt die Tabelle der anderen Verbindung in derselben Abfrage lesen. Sie setzen am Projekt einen SQL-Alias und referenzieren die entfernte Tabelle als @projekt.tabelle, zum Beispiel @billing.orders.
Beim Ausführen holt Kerry die Zeilen über die passende gespeicherte Verbindung und legt sie als temporäre Tabelle auf der Verbindung des Tabs ab. Der JOIN läuft dort, ohne DB Link und ohne etwas auf dem Server zu installieren. Dieselbe Syntax gilt zwischen PostgreSQL und MySQL.
Sie kreuzen die Daten im Editor, ohne die Abfrage zu verlassen.
So definieren Sie den Alias
Der Alias liegt am Projekt, im Feld SQL-Alias (@alias). Ohne diesen Namen hat der Editor im Token nichts aufzulösen.
Sie brauchen einen offenen Workspace, ein Projekt mit ausgefülltem Feld und einen SQL-Tab.
- Im Dialog Neues Projekt oder Projekt bearbeiten geben Sie den Alias ein, zum Beispiel
billing. Das@gehört nicht ins Feld. Es steht nur im SQL. - Verbinden Sie den Tab mit dem Projekt und der Umgebung, in der die Abfrage laufen soll.
- Im Editor schreiben Sie
@projekt.tabelleanstelle der entfernten Tabelle, zum Beispiel@billing.public.orders. - Führen Sie aus. Kerry holt die Zeilen und baut die temporäre Tabelle auf der Verbindung des Tabs.
Die Palette (⌘K / CtrlK) → Neue Verbindung öffnet denselben Projektdialog.
So schreiben Sie den Alias in SQL
Es gibt zwei Schreibweisen für den Alias.
@projekt.tabelle, zum Beispiel @billing.orders, verwendet die Umgebung, auf der der Tab steht. Mit Schema ist der Pfad der des Motors: @billing.public.orders.
@projekt:umgebung, zum Beispiel @billing:production, verwendet diese Umgebung, auch wenn der Tab auf einer anderen steht. Der : steht nur zwischen Alias und Umgebung. Der Rest bleibt mit .: @billing:production.public.orders.
Schema, Tabelle und Spalte verwenden ., niemals :. Richtig: @billing.public.orders, @billing:production.public.orders. Falsch: @billing:production:public.orders.
@name allein, ohne .tabelle und ohne :umgebung, ist eine MySQL-Benutzervariable (SET @s). Das ist kein Alias.
@… legen Sie selbst am Projekt fest. Der Alias muss unter den gespeicherten Projekten eindeutig sein. Nach @projekt: listet der Editor die Umgebungen dieses Projekts. Nach @projekt:umgebung. listet er Schemas und Tabellen dieser Verbindung.
Der Alias ändert den Projektwähler des Tabs nicht. Er wählt nur, woher diese Zeilen kommen. Ist der Name im SQL kein gespeichertes Projekt, markiert der Editor das Token und die Ausführung schlägt mit dem angefragten Namen fehl.
Zwei Projekte in derselben Abfrage
Ein häufiger Fall: der Tab auf einer Bestelldatenbank, die Kunden in einem anderen, schon gespeicherten Projekt.
-- Tab im Projekt shop, Umgebung Vorproduktion.
-- @shop.public.orders folgt dem Tab.
-- @crm.public.customers holt das andere Projekt, in der Umgebung des Tabs.
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;Wenn crm MySQL ist und der Tab auf PostgreSQL steht, bleibt das Muster gleich. Kerry holt die Zeilen und der JOIN läuft weiter auf der Verbindung des Tabs.
Vorproduktion und Produktion in derselben Abfrage
Wenn der Tab auf Vorproduktion steht und Sie dieselbe Tabelle in Produktion wollen, sperren Sie die Umgebung im Token.
| Im SQL | Tab auf | Kerry holt aus |
|---|---|---|
@shop.public.orders | Vorproduktion | Vorproduktion des Projekts shop |
@shop:production.public.orders | Vorproduktion | Produktion des Projekts shop |
-- Tab im Projekt shop, Umgebung Vorproduktion.
SELECT
h.id,
h.status AS status_vorproduktion,
p.status AS status_produktion
FROM @shop.public.orders h
JOIN @shop:production.public.orders p
ON p.id = h.id
WHERE h.status <> p.status;Wenn Sie nur die Umgebung des Tabs wechseln, bleibt die Abfrage im Editor gleich. Was sich ändert, ist das Token ohne :umgebung, weil es dem Tab folgt. Das Token mit :production zeigt weiter auf Produktion.