La pregunta está más o menos respondida, solo me gustaría agregar algunos comentarios para señalar la flexibilidad y el poder de hacer cosas como esta con sql espacial
Mientras leo la pregunta, se puede dividir en dos preguntas. Una pregunta SIG y una pregunta SQL sobre cómo combinar filas en diferentes tablas.
Como se mencionó anteriormente, la parte gis puede resolverse mejor con ST_MakeLine, si son dos puntos que desea conectar con su línea. Si hubiera sido líneas o polígonos, podría usar ST_Shortestline en su lugar para obtener una línea de las geometrías entre sus puntos más cercanos. Eso funcionará con puntos, líneas y polígonos.
La otra parte trata sobre cómo conectar el punto de tienda correcto con el punto de cliente correcto.
Esa es una pregunta básica de la base de datos. Comprender eso dará mucho más placer al usar PostGIS.
La situación más fácil es una tienda con muchos clientes. Entonces solo necesita una tabla de clientes y su punto de tienda y se vería algo así como:
Select ST_Makeline(customers.the_geom, yourPoint) from custmers;
Si tiene su única tienda en una mesa, se vería así:
Select ST_Makeline(customers.the_geom, stores.the_geom) from custmers, stores;
Pero si tiene muchas tiendas y cada cliente solo usa una tienda, obtendrá una solución que se parece a las otras respuestas aquí, por ejemplo:
Select ST_Makeline(customers.the_geom, stores.the_geom)
from custmers, stores
where customers.storeid = stores.id;
PostgreSQL manejará esa consulta de la misma manera que:
Select ST_Makeline(customers.the_geom, stores.the_geom)
from custmers inner join stores
on customers.storeid = stores.id;
Pero en el mundo real, probablemente se encontrará en la situación de que la mayoría de los clientes utilizan muchas tiendas. En ejemplos anteriores hemos tenido la relación de una tienda con muchos clientes, ahora tenemos una situación de muchos a muchos. Muchos clientes usan muchas tiendas.
Entonces hay una mala solución que a veces ves. La gente agrega una nueva fila de clientes para cada tienda que usa. Eso causará muchos problemas si, por ejemplo, desea cambiar su dirección, debe hacerlo en muchos lugares. La base de datos más correcta para hacerlo es hacer una "tabla de enlaces". No sé si esa es la palabra correcta en inglés, pero de todos modos. Esa es una tabla que contiene todos los datos específicos para la relación de los clientes con cada tienda que utiliza. Entonces tienes tres mesas. Uno con tiendas y todos los atributos que pertenecen a la tienda, como cuando está abierto y el número de teléfono para ponerse en contacto. Luego tiene la tabla de clientes, tal vez con la dirección y el número de teléfono del cliente. Luego tiene esta "tabla de enlaces" que debe incluir una identificación para la tienda, la identificación del cliente y tal vez información adicional, como la frecuencia de visitas a esa tienda en particular, o la distancia a la tienda, o esta línea que está creando (pero es mejor crear la distancia y la línea sobre la marcha cuando la necesite). Luego, con esta nueva tabla, su consulta se vería así:
Select ST_Makeline(customers.the_geom, stores.the_geom)
from customers inner join
c_s_link_table on customers.id = c_s_link_table.customerid
inner join stores
on c_s_link_table.storeid = stores.id;
Entonces tienes toda la flexibilidad. Digamos, por ejemplo, que agrega a su tabla de enlaces cuántas veces al mes el cliente visita esa tienda. Entonces puedes escribir una consulta como esta:
Select ST_Makeline(customers.the_geom, stores.the_geom),
c_s_link_table.visits_per_month from
customers inner join c_s_link_table on customers.id = c_s_link_table.customerid
inner join stores on c_s_link_table.storeid = stores.id;
luego puede usar ese atributo, visitas_por_mes para definir el grosor de sus líneas en el mapa que ilustra cuántas visitas recibe cada tienda.