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 deFROM 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.