Tenho a seguinte query:
SELECT *
FROM "TBL_PESSOA"
JOIN "TBL_TIPO_PESSOA"
ON (TBL_PESSOA.ID_TIPO_PESSOA = TBL_TIPO_PESSOA.ID_TIPO_PESSOA);
porém ela esta me dando o seguinte erro:
ERRO: faltando entrada para tabela “tbl_pessoa” na cláusula FROM
LINE 6: ON (TBL_PESSOA.ID_TIPO_PESSOA = TBL_TIPO_PESSOA.ID_TIPO_PES…
^
********** Error **********
ERRO: faltando entrada para tabela “tbl_pessoa” na cláusula FROM
SQL state: 42P01
Character: 75
Que erro é esse? ja tentei fazer de diversas maneiras e nao estou conseguindo, e tambem nao consigo apelidar as tabelas, pois quando uso o apelido.coluna fala que a coluna não existe ou tabela nao existe, porém elas existem!!
alguem consegue me ajudar?
Não sei se tentou desta maneira, mas, eu faria isso.
Em tempo, se você insistir no SELECT *, pode usar o alias assim
SELECTt1.*,t2.*
A
AbelBueno
Ao usar aspas duplas para nome de objetos, você força o postgres a usar aquele nome do jeito que digitou. Sem elas, ele geralmente transforma o nome do objeto para minúsculo (que acreditor ser o formato interno).
Pela mensagem de erro, ele tá procurando uma tabela tbl_pessoa (em minúsculo) no seu FROM mas ele só encontra a versao maiscula.
Acho que se remover todas as aspas duplas, deve funcionar.
M
matheussilva
Quando eu coloco o apelido na tabela eu nao consigo chama-la. fala que que ela não existe
eu também prefiro do jeito que vc demonstrou, porém dessa maneira também não funciona…
E sim, estou o usando o pgadmin
M
matheussilva
Sempre quando eu chamo uma tabela sem aspas dupla da um erro falando que a tabela não existe. Fazendo do jeito que indicou, fala que a “tbl_pessoa” não existe.
D
darlan_machado
Está tentando rodar essa query de que forma?
D
darlan_machado
Presumo que seja o PGAdmin, certo?
Eu concordo com o @AbelBueno. Ou você tira as aspas duplas de tudo ou coloca em tudo. Veja que na cláusula ON você não tem aspas.
M
matheussilva
Sim, PGAdmin
Mas se eu tiro as aspas fala que a tabela não existe
SELECT *
FROM TBL_PESSOA
JOIN TBL_TIPO_PESSOA
ON (TBL_PESSOA.ID_TIPO_PESSOA = TBL_TIPO_PESSOA.ID_TIPO_PESSOA);
erro:
ERRO: relação “tbl_pessoa” não existe
LINE 4: FROM TBL_PESSOA
^
********** Error **********
As tabelas foram todas criadas com letras maiusculas, e em todas, que eu preciso fazer alguma consulta, eu nao consigo a nao ser que eu coloque as aspas, sempre fala que a tabela não existe.
M
matheussilva
Queria entender também porque não consigo utilizar os apelidos das tabelas
quando coloco o apelido.coluna da tabela, da erro tambem dizendo que a tabela não existe…
Aliás, nao acha uma boa idéia criar a tabela usando aspas duplas, vai gerar dor de cabeça pra sempre. Se pode corrigir isso, recomendo.
M
matheussilva
“TABELA” esse seria o nome da tabela? com aspas duplas mesmo??
SELECT *
FROM “TBL_PESSOA” P
JOIN “TBL_TIPO_PESSOA” TP
ON (P.ID_TIPO_PESSOA = TP.ID_TIPO_PESSOA);
Executando essa query, fala que a coluna “P.ID_TIPO_PESSOA” não existe, porém ela existe!!
e se eu tiro as aspas do from, fala que a tabela TBL_PESSOA não existe…
Preciso muito dessa ajuda…
D
darlan_machado
Pode recriar as tabelas, sem aspas no nome?
A
AbelBueno
Se o erro mudou, o problema é diferente.
Suspeito que está reclamando da coluna ID_TIPO_PESSOA pois ela também foi criada com aspas duplas. O que causa os mesmos problemas que o nome da tabela. Experimenta colocar o ID entre aspas e veja se funciona.
M
matheussilva
mas eu não criei tabelas ou colunas com aspas, e sim em letras maiusculas…
Entre aspas da o mesmo erro falando que a coluna não existe…
A
AbelBueno
Faz assim entao, tenta reproduzir o erro naquele site que mandei o link acima (db-fiddle). Coloque as tabelas lá, alguns dados de exemplo e sua query.
Como foi mencionado aqui antes, aspas duplas no nome causa dores de cabeça. Se nao puder se livrar delas, procure outro cliente de banco de dados.
M
matheussilva
Mas amigo, no meu banco eu não criei as tabelas e nem colunas com aspas.
Eu uso porque se não coloca da erro!
O nome delas no Shema está sem aspas!
A
AbelBueno
As aspas nao fazem parte do nome da tabela. Quando o banco encontra aspas num nome, ele vai procurar aquele objeto exatamente como está escrito, enquanto normalmente ele procura tudo em minúscula.
Por exemplo: https://www.db-fiddle.com/f/iAuTCxQXGyWYavNeWq6qX7/0
Aqui foi possível criar 3 tabelas pessoas, pq estou usando aspas. Sem elas teria dado erro.
Se checar a tabela information_schema.tables do seu banco e notar que os nomes nao estao em minúsculo, é porque foram criadas com aspas.
M
matheussilva
Então no postgre, se eu criar uma tabela com letras MAIÚSCULAS ele vai entender que ela estão entre aspas??
Onde consigo chegar essa tabela information_schema.tables?
D
Danielzilli
Pelo psql você pode usar o \d nome_da_tabela ele vai mostrar os detalhes
A
Solucao aceita
AbelBueno1 like
Se você criar sem aspas, ele vai entender como minuscula. Daí pode sempre referenciar sem aspas escrevendo do jeito que quiser.
Se criar com aspas, ele vai entender exatamente como escreveu, daí tem que usar a mesma forma sempre.