Existe uma maneira simples de adaptar esses tipos de consultas MySQL ao PostgreSQL:
definindo variáveis no MySQL como
set @aintconst = -333 set @arealconst = -9.999
Atribuindo variáveis de consultas SELECT e usando essas variáveis posteriormente no meu SQL, como:
select @pfID := id from platform where bios like '%INTEL%' select @clientID := id from client where platformID = @pfID
Eu ficaria muito grato por dicas, especialmente em (2).
mysql
postgresql
Daniel
fonte
fonte
Respostas:
Isso é fácil de fazer dentro de uma função PL / pgSQL (ou um bloco DO ):
Você também pode usar variáveis GUC :
Ou você pode usar um CTE com uma associação:
fonte
Eu uso as instruções WITH:
e:
fonte
Você já respondeu a si mesmo: Não, não existe SQL simples. Você pode usar o PL / PgSQL se desejar variáveis, em uma função ou em um
DO
bloco.A maioria dos usos para variáveis de consulta no MySQL são satisfeitos por CTEs (
WITH
consultas), funções de janela, etc. no PostgreSQL.Bem, na verdade existe, mas eles não são adequados para uso geral em consultas. Você geralmente acessa GUCs personalizados com
SET
eSHOW
, mas pode usar:Os GUCs são caros e é uma má idéia usá-lo para consultas de uso geral, mas ocasionalmente há um uso válido. Você também pode usar configurações como
myapp.variable
também.fonte
Variáveis PSQL
Como pelo menos a versão 7.1, o cliente do PostgreSQL forneceu essa funcionalidade com
psql
variáveisEssencialmente, o que você deseja é a capacidade de criar scripts para SQL. O PSQL possui condicionais e variáveis e a capacidade de alimentar SQL gerado dinamicamente, o que facilita esse trabalho. Isso não é uma funcionalidade do lado do servidor no mundo do PostgreSQL, e geralmente eu faria isso em uma linguagem de cliente (como Node.js ou Perl, e não em
psql
).fonte
SET LOCAL variable value
Para o segundo exemplo, você não precisa de uma variável (nem no MySQL nem no Postgres):
Não tenha medo de subconsultas, o otimizador de consultas do Postgres é muito mais inteligente que o MySQL.
Se o acima for muito lento, reescrevê-lo em uma
exists
consulta às vezes é mais rápido:fonte