Gibt es eine einfache Möglichkeit, diese Arten von MySQL-Abfragen an PostgreSQL anzupassen:
Variablen in MySQL einstellen wie
set @aintconst = -333 set @arealconst = -9.999
Zuweisen von Variablen aus SELECT-Abfragen und anschließende Verwendung dieser Variablen in meinem SQL wie folgt:
select @pfID := id from platform where bios like '%INTEL%' select @clientID := id from client where platformID = @pfID
Ich wäre sehr dankbar für Hinweise, insbesondere auf (2).
mysql
postgresql
Daniel
quelle
quelle
Antworten:
Dies ist in einer PL / pgSQL-Funktion (oder einem DO- Block) einfach zu bewerkstelligen :
Sie können auch GUC- Variablen verwenden:
Oder Sie können einen CTE mit einem Join verwenden:
quelle
Ich benutze WITH-Anweisungen:
und:
quelle
Sie haben dies bereits selbst beantwortet: Nein, es gibt kein einfaches SQL. Sie können PL / PgSQL verwenden, wenn Sie Variablen, eine Funktion oder einen
DO
Block möchten .Die meisten Verwendungen für Abfragevariablen in MySQL werden von CTEs (
WITH
Abfragen), Fensterfunktionen usw. in PostgreSQL erfüllt .Nun, eigentlich gibt es das, aber sie sind nicht für den allgemeinen Gebrauch in Abfragen geeignet. Normalerweise greifen Sie mit
SET
und auf benutzerdefinierte GUCs zuSHOW
, können aber stattdessen Folgendes verwenden:GUCs sind teuer und es ist eine schlechte Idee, sie für allgemeine Abfragen zu verwenden, aber es gibt gelegentlich eine gültige Verwendung. Sie können auch nur Einstellungen wie verwenden
myapp.variable
.quelle
PSQL-Variablen
Seit mindestens Version 7.1 hat der PostgreSQL-Client diese Funktionalität mit
psql
Variablen versehenIm Wesentlichen möchten Sie die Fähigkeit, SQL-Skripte zu erstellen. PSQL verfügt über Bedingungen und Variablen sowie die Möglichkeit, dynamisch generiertes SQL zurückzugeben, was diese Aufgabe erleichtert. Dies ist keine serverseitige Funktionalität in der PostgreSQL-Welt, und im Allgemeinen würde ich dies in einer Client-Sprache tun (wie Node.js oder Perl anstatt in
psql
).quelle
SET LOCAL variable value
Für das zweite Beispiel benötigen Sie keine Variable (weder in MySQL noch in Postgres):
Haben Sie keine Angst vor Unterabfragen. Der Abfrageoptimierer von Postgres ist viel intelligenter als der von MySQL.
Wenn das oben Gesagte zu langsam ist, ist das Umschreiben in eine
exists
Abfrage manchmal schneller:quelle