es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Consulta SQL para encontrar el autobús que viaja a través de una ruta.

Teniendo una tabla llamada “route” que contiene el “bus_id”, el nombre de la parada y la posición (que es la secuencia de las paradas).
Los autobuses viajan en una dirección según la posición.

Tabla: route

| bus_id | stop_name | position |
|--------|-----------|----------|
| 1      | Stop_1    | 1        |
| 1      | Stop_2    | 2        |
| 1      | Stop_3    | 3        |
| 1      | Stop_4    | 4        |
| 1      | Stop_5    | 5        |
| 1      | Stop_6    | 6        |
| 1      | Stop_7    | 7        |
| 2      | Ramdom_1  | 1        |
| 2      | Ramdom_2  | 2        |
| 2      | Stop_3    | 3        |
| 2      | Stop_4    | 4        |
| 2      | Stop_5    | 5        |
| 2      | Stop_6    | 6        |
| 2      | Ramdom_3  | 7        |

Ahora necesitamos encontrar el “bus_id” que va desde la parada 3 hasta la parada 6, es decir, “bus_id” = 1 y 2.

Ejemplos:
1. Desde “stop_1” hasta “stop_6” = 1
2. Desde “stop_6” hasta “Ramdom_3” = 2
3. Desde “stop_6” hasta “stop_1” = no se encontró ningún autobús

Necesitamos una consulta MYSQL para encontrar los datos anteriores.

La base de datos utilizada: Versión del servidor 10.4.21-MariaDB (XAMPP)

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para encontrar el bus_id que viaja desde stop_3 hasta stop_6, podemos usar la siguiente consulta de MYSQL:

    SELECT DISTINCT a.bus_id
    FROM route a
    JOIN route b ON a.bus_id = b.bus_id
    WHERE a.stop_name = 'Stop_3' AND b.stop_name = 'Stop_6' AND a.position < b.position
    

    Esta consulta utiliza una auto-join en la tabla route para unir dos filas del mismo bus_id. La consulta filtra las filas donde la parada de inicio es Stop_3 y la parada de destino es Stop_6. La condición a.position < b.position asegura que el autobús viaje de stop_3 a stop_6 en la secuencia correcta.

    La salida de la consulta anterior será:

    | bus_id |
    |--------|
    | 1      |
    | 2      |
    

    Si queremos encontrar el autobús que viaja desde stop_6 hasta Ramdom_3, podemos modificar la consulta anterior a:

    SELECT DISTINCT a.bus_id
    FROM route a
    JOIN route b ON a.bus_id = b.bus_id
    WHERE a.stop_name = 'Stop_6' AND b.stop_name = 'Ramdom_3' AND a.position < b.position
    

    La salida de la consulta anterior será:

    | bus_id |
    |--------|
    | 2      |
    

    Y, si queremos encontrar el autobús que viaja desde stop_6 hasta stop_1, podemos modificar la consulta a:

    SELECT DISTINCT a.bus_id
    FROM route a
    JOIN route b ON a.bus_id = b.bus_id
    WHERE a.stop_name = 'Stop_6' AND b.stop_name = 'Stop_1' AND a.position < b.position
    

    La salida de la consulta anterior quedará vacía, ya que no hay ningún autobús que viaje desde stop_6 hasta stop_1.

Comments are closed.