sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man sammanfogar två tabeller där en av dem inte har en primärnyckel och inte har samma teckenlängd

Prova detta för att endast jämföra de första 8 tecknen:

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;

Skådespelarna trimmar implicit efterföljande karaktärer. ddid har bara 8 tecken till att börja med. Du behöver inte bearbeta det heller. Detta uppnår samma:

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

Kom dock ihåg att strängfunktionen left() introducerades endast med PostgreSQL 9.1. I tidigare versioner kan du ersätta:

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

__

Grundläggande förklaring för nybörjare:

  • Frågan använder en JOIN . Läs mer om det i manualen .

  • FROM domainregion r är en förkortning för FROM domainregion AS r . AS är bara brus i det här fallet i PostgreSQL. Tabellaliaset gör frågan kortare och lättare att läsa men har ingen annan inverkan här. Du kan också använda tabellalias för att inkludera samma tabell flera gånger till exempel.

  • Anslutningsvillkoret ON r.domainid::varchar(8) = d.ddid sammanfogar endast de rader där de två uttrycken matchar exakt. Återigen, läs om dessa grunderna i manualen (eller någon annan källa).

Det är en enkel fråga, inte mycket att förklara här.




  1. Hur kan du expandera en komprimerad PostgreSQL-rad till separata kolumner?

  2. Turkiska tecken visas inte korrekt

  3. PDO Error - PDOException' med meddelandet 'SQLSTATE[HY000]:Allmänt fel'

  4. Jämför flera datumintervall