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

Sådan forbinder du to tabeller, hvor en af ​​dem ikke har en primær nøgle og ikke den samme tegnlængde

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 for FROM 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.




  1. Indvirkning af fragmentering på udførelsesplaner

  2. SQL Sammenføj tabeller om tid mellem start og slut

  3. tsql sidste forekomst af inde i en streng

  4. Hvordan man bruger en case-erklæring til at bestemme, hvilket felt der skal gå med