sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo unir dos tablas con una de ellas que no tiene una clave principal y no tiene la misma longitud de caracteres

Prueba esto para comparar solo los primeros 8 caracteres:

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;

El elenco recorta implícitamente los caracteres finales. ddid solo tiene 8 caracteres para empezar. No es necesario procesarlo también. Esto logra lo mismo:

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

Sin embargo, tenga en cuenta que la función de cadena left() solo se introdujo con PostgreSQL 9.1. En versiones anteriores puede sustituir:

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

__

Explicación básica para principiantes:

  • La consulta utiliza un JOIN . Lea más sobre eso en el manual .

  • FROM domainregion r es la abreviatura de FROM domainregion AS r . AS es solo ruido en este caso en PostgreSQL. El alias de tabla hace que la consulta sea más corta y fácil de leer, pero no tiene ningún otro impacto aquí. También puede usar alias de tabla para incluir la misma tabla varias veces, por ejemplo.

  • La condición de combinación ON r.domainid::varchar(8) = d.ddid une solo aquellas filas donde las dos expresiones coinciden exactamente. Nuevamente, lea sobre esos conceptos básicos en el manual (o cualquier otra fuente).

Es una consulta simple, no hay mucho que explicar aquí.