Spróbuj porównać tylko pierwszych 8 znaków:
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;
Obsada niejawnie przycina końcowe znaki. ddid
na początku ma tylko 8 znaków. Nie trzeba go też przetwarzać. Daje to to samo:
JOIN dyndomrun d ON left(r.domainid, 8) = d.ddid
Należy jednak pamiętać, że funkcja ciągu left()
został wprowadzony dopiero w PostgreSQL 9.1. We wcześniejszych wersjach możesz zastąpić:
JOIN dyndomrun d ON substr(r.domainid, 1, 8) = d.ddid
__
Podstawowe wyjaśnienie dla początkujących:
-
Zapytanie używa
JOIN
. Przeczytaj więcej na ten temat w instrukcji . -
FROM domainregion r
jest skrótem odFROM domainregion AS r
.AS
to po prostu szum w tym przypadku w PostgreSQL. Alias tabeli sprawia, że zapytanie jest krótsze i łatwiejsze do odczytania, ale nie ma tu żadnego innego wpływu. Możesz także użyć aliasów tabel, aby na przykład wielokrotnie dołączyć tę samą tabelę. -
Warunek łączenia
ON r.domainid::varchar(8) = d.ddid
łączy ze sobą tylko te wiersze, w których oba wyrażenia dokładnie pasują. Ponownie przeczytaj o tych podstawach w podręczniku (lub jakiekolwiek inne źródło).
To proste zapytanie, nie trzeba tutaj wiele wyjaśniać.