如何使用sql从多个表中获取列

时间:2014-10-25 03:05:09

标签: mysql

我正在从事铁路运输。 我有以下表格:

DAY table

| - id  |  name  |
|   1   | sunday |
|   2   | monday |
|   3   | tuesday|

电台表

|- id   | name  | 
|   1   | zaria |
|   2   | kano  |
|   3   | minna |

路线表

| - id  | source_station_id | destination_station_id|
|   1   |       1           |            2          |
|   2   |       1           |            3          |
|   3   |       2           |            3          |
|   4   |       3           |            2          |
|   3   |       3           |            1          |

离境表

| route_id | day_id | departure_time |
|     1    |   2    |   07:00 hrs    |
|     1    |   3    |   07:00 hrs    |
|     3    |   2    |   15:30 hrs    |

route_id, day_id, source_station_id, destination_station_id是分别从route,day和station表引用的所有外键。

现在......我如何使用sql从这些表中获取.. 输出看起来像下表。

| source | destination | day | departure_time |

1 个答案:

答案 0 :(得分:1)

您想使用JOIN

SELECT 
    source.name      AS source,
    destination.name AS destination,
    day.name         AS day, 
    departure.time   AS departure_time
FROM departure
JOIN station AS source
    ON departure.source_station_id = source.id
JOIN station AS destination
    ON departure.source_station_id = destination.id
JOIN day
    ON departure.day_id = day.id
WHERE
    # any specific criteria you may have, like:
    departure.day_id = 1 # for a sunday

应该这样做。有关详细信息,请参阅MySQL JOIN Syntax

那就是说,这是一个非常标准的问题,看到它被否决后我也不会感到惊讶。

此外,从结构的角度来看,你最好将“day”存储为DATETIME,然后将其转换为动态的人类可读日期字符串。

就目前而言,由于你只是在一周的某一天,你无法区分本周和去年或去年。看看this comment的下半部分,我开始谈论跨越一段时间,并讨论DATETIME的使用。对于性能和易用性,使用本机数据类型是更可取的。