Como devo modificar uma consulta SQL para PostgreSQL?

votos
2

Eu tenho consulta SQL, que está trabalhando agradável em Oracle e MSSQL. Agora eu estou tentando isso em PostgreSQL e dá uma estranha exceção:org.postgresql.util.PSQLException: ERROR: missing FROM-clause entry for table main

Aqui está a consulta:

SELECT *
FROM main main
     INNER JOIN something_link something_link ON main.id = something_link.mainid
     INNER JOIN something somehting ON something_link.somethingid = something.id
     INNER JOIN type type ON something.typeid = type.id

Esta é consulta bastante simples e eu não posso ver por que ele não está funcionando no Windows XP SP2, PostgreSQL 8.3?

Publicado 22/10/2008 em 16:46
fonte usuário
Em outras línguas...                            


3 respostas

votos
4

somehting => algo


postgres = # criar banco de dados teste
postgres- #;
CREATE DATABASE

postgres = teste # \ c
Agora você está conectado ao banco de dados "teste".

test = # select version ();
                                            versão                                            
-------------------------------------------------- ---------------------------------------------
 PostgreSQL 8.3.3 em i486-pc-linux-gnu, compilado por cc GCC (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)

test = # criar a tabela main (int id);
CRIAR A TABELA

teste = # criar something_link mesa (mainid int);
CRIAR A TABELA

test = # criar a tabela algo (id int);
CRIAR A TABELA

test = # criar tipo de tabela (id int);
CRIAR A TABELA

test = # alterar a tabela algo adicionar coluna typeid int;
ALTERAR A TABELA

test = # SELECT *
test- # FROM "principal" principal
test- # INNER JOIN something_link "something_link" ON principal. "id" = something_link. "mainid"
test- # INNER JOIN "algo" somehting ON something_link. "somethingid" = alguma coisa. "id"
test- # INNER JOIN tipo "tipo" em alguma coisa. "typeid" = tipo. "id"
teste-# ;
ERRO: something_link.somethingid coluna não existe
Linha 4:. INNER JOIN somehting "algo" ON something_link "som ...
                                                 ^
test = # alterar a tabela something_link adicionar coluna somethingid int;
ALTERAR A TABELA

test = # SELECT *                                              
DE principal "principal"
     INNER JOIN something_link "something_link" ON principal. "Id" = something_link. "Mainid"
     INNER JOIN "algo" * somehting * ON something_link. "Somethingid" = alguma coisa. "Id"
     INNER JOIN tipo "tipo" em alguma coisa. "Typeid" = tipo. "Id"
;

ERRO: referência inválida a entrada da cláusula para a tabela "algo"
Linha 4: ... hing" somehting ON something_link. "Somethingid"= algo ....
                                                             ^
DICA: Talvez você significou para fazer referência ao apelido de tabela "somehting".

test = # SELECT *
DE principal "principal"
     INNER JOIN something_link "something_link" ON principal. "Id" = something_link. "Mainid"
     INNER JOIN algo "algo" ON something_link. "Somethingid" = alguma coisa. "Id"
     INNER JOIN tipo "tipo" em alguma coisa. "Typeid" = tipo. "Id"
;

 id | mainid | somethingid | id | typeid | identidade

---- + -------- + ------------- + ---- + -------- + ----

(linhas 0)
Respondeu 22/10/2008 em 17:07
fonte usuário

votos
2

De acordo com esta , parece que você quer digitado incorretamente um alias ou usado um nome de tabela no lugar dele.

Respondeu 22/10/2008 em 17:11
fonte usuário

votos
4

O verdadeiro problema não é realmente a consulta, mas a configuração padrão do PostgreSQL 8.3. Depois de corrigir o erro de ortografia (10x Kendrick Wilson), o problema persistiu, até que eu editado o arquivo "postgresql.conf". Deve haver uma linha:

add_missing_from = on

Esta linha garante a compatibilidade com os outros dialetos SQL.

Respondeu 23/10/2008 em 08:12
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more