PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como unir duas tabelas com uma delas sem chave primária e não com o mesmo comprimento de caractere


Tente isso para comparar apenas os primeiros 8 caracteres:
SELECT r.domainid, r.dombegin, r.domend, d.ddid 
FROM   domainregion r
JOIN   dyndomrun d ON r.domainid::varchar(8) = d.ddid 
ORDER  BY r.domainid, d.ddid, r.dombegin, r.domend;

O elenco apara implicitamente os caracteres à direita. ddid tem apenas 8 caracteres para começar. Não há necessidade de processá-lo também. Isso consegue o mesmo:
JOIN   dyndomrun d ON left(r.domainid, 8) = d.ddid 

No entanto, esteja ciente de que a função string left() foi introduzido apenas com o PostgreSQL 9.1. Em versões anteriores, você pode substituir:
JOIN   dyndomrun d ON substr(r.domainid, 1, 8) = d.ddid

__

Explicação básica para iniciantes:


  • A consulta usa um JOIN . Leia mais sobre isso no manual .

  • FROM domainregion r é a abreviação de FROM domainregion AS r . AS é apenas ruído neste caso no PostgreSQL. O alias da tabela torna a consulta mais curta e fácil de ler, mas não tem outro impacto aqui. Você também pode usar aliases de tabela para incluir a mesma tabela várias vezes, por exemplo.

  • A condição de junção ON r.domainid::varchar(8) = d.ddid une apenas as linhas em que as duas expressões correspondem exatamente. Novamente, leia sobre esses básico no manual (ou qualquer outra fonte).

É uma consulta simples, não há muito para explicar aqui.