Zkuste toto pro porovnání pouze prvních 8 znaků:
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;
Herecké obsazení implicitně ořezává koncové postavy. ddid
má pro začátek pouze 8 znaků. Není třeba to také zpracovávat. Tím se dosáhne stejného:
JOIN dyndomrun d ON left(r.domainid, 8) = d.ddid
Mějte však na paměti, že funkce řetězce left()
byl představen až s PostgreSQL 9.1. V dřívějších verzích můžete nahradit:
JOIN dyndomrun d ON substr(r.domainid, 1, 8) = d.ddid
__
Základní vysvětlení pro začátečníky:
-
Dotaz používá
JOIN
. Přečtěte si více o tom v příručce . -
FROM domainregion r
je zkratka proFROM domainregion AS r
.AS
je v tomto případě v PostgreSQL jen šum. Alias tabulky dělá dotaz kratší a snáze čitelný, ale nemá zde žádný jiný dopad. Můžete také použít aliasy tabulek, abyste například zahrnuli stejnou tabulku vícekrát. -
Podmínka spojení
ON r.domainid::varchar(8) = d.ddid
spojí dohromady pouze ty řádky, kde se dva výrazy přesně shodují. Znovu si přečtěte o těchto základech v příručce (nebo jakýkoli jiný zdroj).
Je to jednoduchý dotaz, není zde příliš co vysvětlovat.