sql >> Database >  >> RDS >> PostgreSQL

Hoe u twee tabellen samenvoegt waarvan er één geen primaire sleutel heeft en niet dezelfde tekenlengte

Probeer dit om alleen de eerste 8 tekens te vergelijken:

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;

De cast trimt impliciet slepende karakters. ddid heeft slechts 8 tekens om mee te beginnen. Het is ook niet nodig om het te verwerken. Dit bereikt hetzelfde:

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

Houd er echter rekening mee dat de tekenreeksfunctie left() werd pas geïntroduceerd met PostgreSQL 9.1. In eerdere versies kunt u vervangen door:

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

__

Basisverklaring voor beginners:

  • De query gebruikt een JOIN . Lees meer daarover in de handleiding .

  • FROM domainregion r is een afkorting voor FROM domainregion AS r . AS is gewoon ruis in dit geval in PostgreSQL. De tabelalias maakt de query korter en gemakkelijker te lezen, maar heeft hier geen andere impact. U kunt ook tabelaliassen gebruiken om dezelfde tabel bijvoorbeeld meerdere keren op te nemen.

  • De join-voorwaarde ON r.domainid::varchar(8) = d.ddid voegt alleen die rijen samen waar de twee uitdrukkingen exact overeenkomen. Lees nogmaals over die basisprincipes in de handleiding (of een andere bron).

Het is een simpele vraag, hier valt niet veel uit te leggen.




  1. Identiteitstoename springt in SQL Server-database

  2. odoo12 database back-up geen eigenaar?

  3. Laravel volgorde door heeftveel relaties

  4. Het tellen van rijen versnellen in MySQL