MySQL查询查找两站之间的火车

标签 mysql sql

我的列车详情表,

Table Name- traindetailtb

Id  Train_Number  Train_Name       From   To
1    27658         Venad Express    ABC   XYZ
2    27659         Venad Express    XYZ   ABC

还有我的火车日表,

Table Name- traindaystb
Id  Train_Number Days
1    27658       Sunday
2    27658       Wednesday
3    27659       Saturday
4    27659       Friday

这是我的火车时刻表,

Table Name- scheduletb
Id  Train_Number  Station  Time
1    27658          ABC     09:00am  
2    27658          CDE     10:00am
3    27658          XYZ     11:00am
4    27659          XYZ     12:00pm
5    27659          CDE     01:00pm
6    27659          ABC     02:00pm

将有两个输入,From 和 To

我需要一个查询来给出给定车站之间的所有列车(即,Train_Number、Train_Name、Days)

例如: 对于输入 From- CDE To-XYZ ----> 输出将是-- 27658 Venad Express S W

和对于从- XYZ 到-CDE 的输入----> 输出将是-- 27659 Venad Express M T

任何人都可以帮助我做到这一点。

最佳答案

你在找这样的东西吗?

SELECT q.train_number, MAX(t.train_name) train_name, GROUP_CONCAT(LEFT(d.days, 1)) days
  FROM
(
  SELECT s.train_number
    FROM scheduletb s JOIN scheduletb e
      ON s.train_number = e.train_number
   WHERE s.station = 'CDE' -- from
     AND e.station = 'XYZ' -- to
     AND s.id < e.id
) q JOIN traindaystb d
    ON q.train_number = d.train_number JOIN traindetailtb t
    ON q.train_number = t.train_number
 GROUP BY q.train_number

CDE -> XYZ 的输出:

| TRAIN_NUMBER |    TRAIN_NAME | DAYS |
|--------------|---------------|------|
|        27658 | Venad Express |  S,W |

XYZ -> CDE 的输出:

| TRAIN_NUMBER |    TRAIN_NAME | DAYS |
|--------------|---------------|------|
|        27659 | Venad Express |  S,F |

这是 SQLFiddle 演示

关于MySQL查询查找两站之间的火车,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24795257/

相关文章:

mysql - 改进mysql查询评论2层层次结构

sql - 活跃用户跟踪、PHP session

sql - 如何在 Postgres 中使用带通配符的组

MySql CASE WHEN THEN 也需要 WHERE?

mysql - 仅返回 mysql 表中的列名值

使用 'Between' 计算坐标的 MySQL 逻辑问题

MySQL - 避免文件排序

java - Netbeans错误: Schema doesnt exist

sql - 合并两个数据透视表 SQL Server

sql - CREATE TABLE 失败 ORA 00957 列名重复