sql >> Databáze >  >> RDS >> PostgreSQL

Jak spojit dvě tabulky, přičemž jedna z nich nemá primární klíč a nemá stejnou délku znaků

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




  1. mysql -> vložit do tbl (vybrat z jiné tabulky) a nějaké výchozí hodnoty

  2. Hibernace dotazů na databázi

  3. Seřadit podle pořadí hodnot v příkazu select v klauzuli v mysql

  4. MySQL vyvolá chybu nesprávné hodnoty řetězce