PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment joindre deux tables dont l'une n'a pas de clé primaire et n'a pas la même longueur de caractères

Essayez ceci pour comparer uniquement les 8 premiers caractères :

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;

Le cast supprime implicitement les caractères de fin. ddid n'a que 8 caractères pour commencer. Pas besoin de le traiter non plus. Cela permet d'obtenir le même :

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

Cependant, sachez que la fonction de chaîne left() n'a été introduit qu'avec PostgreSQL 9.1. Dans les versions antérieures, vous pouvez remplacer :

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

__

Explication de base pour les débutants :

  • La requête utilise un JOIN . Lisez plus d'informations à ce sujet dans le manuel .

  • FROM domainregion r est l'abréviation de FROM domainregion AS r . AS est juste du bruit dans ce cas dans PostgreSQL. L'alias de table rend la requête plus courte et plus facile à lire mais n'a aucun autre impact ici. Vous pouvez également utiliser des alias de table pour inclure la même table plusieurs fois par exemple.

  • La condition de jointure ON r.domainid::varchar(8) = d.ddid joint uniquement les lignes où les deux expressions correspondent exactement. Encore une fois, lisez ces basiques dans le manuel (ou toute autre source).

C'est une requête simple, pas grand chose à expliquer ici.