如何根据其他3个表从表中选择数据?

时间:2014-12-22 09:45:23

标签: mysql sql select join inner-join

以下是表格和相关字段:

shapes:        shape_id, shape_value
trips:         shape_id, trip_id
stop_times:    trip_id, stop_id
stops:         stop_id, stop_value

现在是逻辑流程:

我想选择 shapes_shape.value ,其中 shapes.shape_id = trips.shape_id

trips.trip_id = stop_times.trip_id

选择

trips.shape_id stop_times.stop_id = stops.stop_id

选择

stop_times.trip_id

最后选择 stops.stop_id ,其中 stop_value< 5

我该如何查询?

还值得一提:对于每个 stop_times.stop_id ,可能有20-50行具有相同的 stop_times.trip_id (列中的其他参数不同)与 trips.trip_id trips.shape_id 。如何修改数据库和表以使服务器更容易?如果有其他行具有相同的2列,我该如何删除行?

stop_times表中的示例:

trip_id  arrival_time  departure_time  stop_id  stop_sequence
2147483647  05:26:30    05:26:30       8447          4
2147483647  05:36:30    05:36:30       8447          4
2147483647  05:46:30    05:46:30       8447          4
2147483647  05:56:30    05:56:30       8447          4
2147483647  06:06:30    06:06:30       8447          4

我是SQL语法的新手,无法获得连接表的概念以及通常复杂的选择查询。

*重要的是要提到每个表包含50,000-500,000行,而现在我正在构建我的应用程序的基础并希望使其正常工作我很乐意收到有关如何改进查询的任何建议进一步,只是让我在开发后期进行研究的概念(虽然你在这里提供的查询很简单,可能没有那么优化)

1 个答案:

答案 0 :(得分:1)

只需使用 JOIN 即可将表与适当的列连接起来。检查以下查询:

试试这个:

SELECT s.shape_value
FROM shapes s 
INNER JOIN trips t ON s.shape_id = t.shape_id
INNER JOIN stop_times st ON t.trip_id = st.trip_id
INNER JOIN stops ss ON st.stop_id = ss.stop_id
WHERE ss.stop_value < 5;