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 rest l'abréviation deFROM domainregion AS r.ASest 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.ddidjoint 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.