Prøv dette for kun at sammenligne de første 8 tegn:
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;
Rollebesætningen trimmer implicit efterfølgende karakterer. ddid
har kun 8 tegn til at begynde med. Det er heller ikke nødvendigt at behandle det. Dette opnår det samme:
JOIN dyndomrun d ON left(r.domainid, 8) = d.ddid
Vær dog opmærksom på, at strengfunktionen left()
blev kun introduceret med PostgreSQL 9.1. I tidligere versioner kan du erstatte:
JOIN dyndomrun d ON substr(r.domainid, 1, 8) = d.ddid
_
Grundlæggende forklaring for begyndere:
-
Forespørgslen bruger en
JOIN
. Læs mere om det i manualen . -
FROM domainregion r
er en forkortelse forFROM domainregion AS r
.AS
er bare støj i dette tilfælde i PostgreSQL. Tabelaliaset gør forespørgslen kortere og lettere at læse, men har ingen anden indflydelse her. Du kan også bruge tabelaliasser til at inkludere den samme tabel flere gange for eksempel. -
Sammenkædningsbetingelsen
ON r.domainid::varchar(8) = d.ddid
føjer kun de rækker sammen, hvor de to udtryk matcher nøjagtigt. Igen, læs om disse grundlæggende oplysninger i manualen (eller enhver anden kilde).
Det er en simpel forespørgsel, der er ikke meget at forklare her.