PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come unire due tabelle con una di esse che non ha una chiave primaria e non ha la stessa lunghezza di caratteri

Prova questo per confrontare solo i primi 8 caratteri:

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;

Il cast taglia implicitamente i personaggi finali. ddid ha solo 8 caratteri per cominciare. Non c'è bisogno di elaborarlo, anche. Questo ottiene lo stesso:

JOIN   dyndomrun d ON left(r.domainid, 8) = d.ddid 

Tuttavia, tieni presente che la funzione stringa left() è stato introdotto solo con PostgreSQL 9.1. Nelle versioni precedenti puoi sostituire:

JOIN   dyndomrun d ON substr(r.domainid, 1, 8) = d.ddid

__

Spiegazione di base per principianti:

  • La query utilizza un JOIN . Leggi ulteriori informazioni nel manuale .

  • FROM domainregion r è l'abbreviazione di FROM domainregion AS r . AS è solo rumore in questo caso in PostgreSQL. L'alias tabella rende la query più breve e più facile da leggere ma non ha altro impatto qui. Ad esempio, puoi anche utilizzare gli alias di tabella per includere la stessa tabella più volte.

  • La condizione di unione ON r.domainid::varchar(8) = d.ddid unisce solo le righe in cui le due espressioni corrispondono esattamente. Ancora una volta, leggi quelle nozioni di base nel manuale (o qualsiasi altra fonte).

È una domanda semplice, non c'è molto da spiegare qui.