¿Existe una manera directa de adaptar estos tipos de consultas MySQL a PostgreSQL:
establecer variables en MySQL como
set @aintconst = -333 set @arealconst = -9.999
Asignando variables de consultas SELECT y usando esas variables posteriormente en mi SQL como:
select @pfID := id from platform where bios like '%INTEL%' select @clientID := id from client where platformID = @pfID
Estaría muy agradecido por los consejos, especialmente en (2).
mysql
postgresql
Daniel
fuente
fuente
Respuestas:
Esto es fácil de hacer dentro de una función PL / pgSQL (o un bloque DO ):
También puede usar variables GUC :
O puede usar un CTE con una combinación:
fuente
Yo uso CON declaraciones:
y:
fuente
Usted ya respondió esto usted mismo: No, no existe en SQL simple. Puede usar PL / PgSQL si desea variables, en una función o un
DO
bloque.La mayoría de los usos de las variables de consulta en MySQL son satisfechos por CTE (
WITH
consultas), funciones de ventana, etc. en PostgreSQL.Bueno, en realidad lo hay, pero no son adecuados para uso general dentro de las consultas. Por lo general, accede a GUC personalizados con
SET
ySHOW
, pero en su lugar puede usar:Los GUC son caros y es una mala idea usar esto para consultas de propósito general, pero ocasionalmente hay un uso válido. Solo puedes usar configuraciones como
myapp.variable
, también.fuente
Variables PSQL
Desde al menos la versión 7.1, el cliente de PostgreSQL ha proporcionado esta funcionalidad con
psql
variablesEsencialmente, lo que desea es la capacidad de script SQL. PSQL tiene condicionales y variables, y la capacidad de retroalimentar SQL generado dinámicamente, lo que facilita este trabajo. Esta no es la funcionalidad del lado del servidor en el mundo de PostgreSQL, y generalmente lo haría en un lenguaje de cliente (como Node.js o Perl en lugar de hacerlo en
psql
).fuente
SET LOCAL variable value
Para el segundo ejemplo, no necesita una variable (ni en MySQL ni en Postgres):
No tenga miedo de las subconsultas, el optimizador de consultas de Postgres es mucho más inteligente que MySQL.
Si lo anterior es demasiado lento, reescribirlo en una
exists
consulta a veces es más rápido:fuente