MySQL - Consulta a una tabla

 
Vista:
sin imagen de perfil

Consulta a una tabla

Publicado por Diego (2 intervenciones) el 04/11/2017 16:37:50
bdd

Buenos días amigos... tengo esas tablas... y quiero hacer la consulta a la tabla rutas...

La cuestión es que los campos de la tabla rutas hacen referencia a la misma tabla ciudades...

tengo algo asi ya ingresado...

dato1

Y el resultado que espero es:

id_ruta | provincia(SALIDA NOMBRE) | ciudad(SALIDA NOMBRE) | provincia(DESTINO NOMBRE) | ciudad(DESTINO NOMBRE) | Precio

Trate de hacer algo asi.... pero no se como hacer para que aparezca la provincia y ciudad DESTINO

dato2

y lo que espero es lo siguiente:

dato3

Como hacer eso amigos...???

Muchas gracias de antemano...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Consulta a una tabla

Publicado por leonardo_josue (414 intervenciones) el 06/11/2017 16:08:40
Hola Diego:

No nos pones un ejemplo de la información de cada una de tus tablas, por lo tanto resulta algo complicado saber cómo obtienes el resultado que estás planteando, sin embargo, creo entender en donde está el problema. Voy a utilizar un ejemplo similar para ver si esto es lo que necesitas:

supongamos que tienes estas tablas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mysql> SELECT * FROM ciudades;
+-----------+---------------+
| id_ciudad | nombre_ciudad |
+-----------+---------------+
|         1 | ciudad uno    |
|         2 | ciudad dos    |
|         3 | ciudad tres   |
+-----------+---------------+
3 rows in set (0.00 sec)
 
mysql> SELECT * FROM rutas;
+---------+------------------+-------------------+--------+
| id_ruta | id_ciudad_origen | id_ciudad_destino | precio |
+---------+------------------+-------------------+--------+
|       1 |                1 |                 2 |    100 |
|       2 |                1 |                 3 |    200 |
|       3 |                2 |                 3 |    300 |
|       4 |                3 |                 1 |    400 |
+---------+------------------+-------------------+--------+
4 rows in set (0.00 sec)

Ahora, si lo que quieres obtener es la descripción de la ciudad ORIGEN y DESTINO, lo que tienes que hacer es un DOBLE JOIN a tu catálogo de ciudades, para lo cual simplemente utilizas un ALIAS distinto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql> select
    ->   rutas.id_ruta,
    ->   C1.nombre_ciudad ciudad_origen,
    ->   C2.nombre_ciudad ciudad_destino,
    ->   rutas.precio
    -> FROM rutas
    -> INNER JOIN ciudades C1 on C1.id_ciudad = rutas.id_ciudad_origen
    -> INNER JOIN ciudades C2 on C2.id_ciudad = rutas.id_ciudad_destino;
+---------+---------------+----------------+--------+
| id_ruta | ciudad_origen | ciudad_destino | precio |
+---------+---------------+----------------+--------+
|       1 | ciudad uno    | ciudad dos     |    100 |
|       2 | ciudad uno    | ciudad tres    |    200 |
|       3 | ciudad dos    | ciudad tres    |    300 |
|       4 | ciudad tres   | ciudad uno     |    400 |
+---------+---------------+----------------+--------+
4 rows in set (0.05 sec)

No sé si esto es realmente lo que quieres... pero haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Consulta a una tabla

Publicado por Diego (2 intervenciones) el 07/11/2017 02:13:13
Muchas gracias mi estimado...

Con la explicación tuya me sirvio para realizar mi consulta, la cual quedo de la siguiente manera... No se si sea la correcta... pero los resultados son los que espero...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
  rut.id_ruta AS idRuta
  , proSalida.provincia AS provSalida
  , ciuSalida.ciudad AS ciuSalida
  , proDestino.provincia AS provDestino
  , ciuDestino.ciudad AS ciuDestino
  , rut.precio
FROM
  ciudades ciuSalida
  INNER JOIN ciudades ciuDestino
  INNER JOIN provincias proSalida ON (ciuSalida.id_provincia = proSalida.id)
  INNER JOIN provincias proDestino ON (ciuDestino.id_provincia = proDestino.id)
  INNER JOIN rutas rut ON (rut.id_prov_salida = ciuSalida.id_provincia) AND (rut.id_ciu_salida = ciuSalida.id)
  AND (rut.id_prov_destino = ciuDestino.id_provincia) AND (rut.id_ciu_destino = ciuDestino.id) ORDER BY provSalida";

Podria optimizarse esta consulta..??? muchas gracias...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar