PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So verbinden Sie zwei Tabellen, von denen eine keinen Primärschlüssel und nicht die gleiche Zeichenlänge hat

Versuchen Sie dies, um nur die ersten 8 Zeichen zu vergleichen:

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;

Die Besetzung kürzt implizit nachgestellte Zeichen. ddid hat zu Beginn nur 8 Zeichen. Es muss auch nicht verarbeitet werden. Dies erreicht dasselbe:

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

Beachten Sie jedoch, dass die Zeichenfolgenfunktion left() wurde erst mit PostgreSQL 9.1 eingeführt. In früheren Versionen können Sie Folgendes ersetzen:

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

__

Grundlegende Erklärung für Anfänger:

  • Die Abfrage verwendet einen JOIN . Lesen Sie mehr darüber im Handbuch .

  • FROM domainregion r ist die Abkürzung für FROM domainregion AS r . AS ist in diesem Fall in PostgreSQL nur Rauschen. Der Tabellenalias macht die Abfrage kürzer und leichter lesbar, hat aber hier keine weiteren Auswirkungen. Sie können auch Tabellenaliase verwenden, um beispielsweise dieselbe Tabelle mehrmals einzuschließen.

  • Die Join-Bedingung ON r.domainid::varchar(8) = d.ddid verbindet nur die Zeilen, in denen die beiden Ausdrücke genau übereinstimmen. Lesen Sie noch einmal über diese Grundlagen im Handbuch (oder jede andere Quelle).

Es ist eine einfache Abfrage, die hier nicht viel zu erklären ist.