简体   繁体   English

SQL Multiple Tables连接一对多关系

[英]SQL Multiple Tables join one to many relationship

Hi I have 3 tables like 嗨我有3张桌子

1) Table routes 1)表路线

route_id
route_name
total_stop

2) Table stops 2)表停止

stop_id
stop_name
stop_address
stop_latitude
stop_longitude

3) Table route_stop 3)表route_stop

route_id
stop_id
stop_position

My Query is 我的查询是

SELECT 
  routes.route_name,
  (SELECT 
    CONCAT(
      stops.stop_latitude,
      ",",
      stops.stop_longitude
    ) 
  FROM
    stops 
  WHERE stops.stop_id = route_stop.stop_id 
    AND route_stop.stop_position = 1) AS start_pt,
  (SELECT 
    CONCAT(
      stops.stop_latitude,
      ",",
      stops.stop_longitude
    ) 
  FROM
    stops 
  WHERE stops.stop_id = route_stop.stop_id 
    AND route_stop.stop_position = routes.total_stop) AS end_pt,
  routes.total_stop 
FROM
  routes 
  INNER JOIN route_stop 
    ON routes.route_id = route_stop.route_id 
  INNER JOIN stops 
    ON route_stop.stop_id = stops.stop_id 
GROUP BY routes.route_id ;

here end_pt column return NULL , what am i doing wrong here . 这里end_pt列返回NULL,这里我做错了什么。 Please help.... 请帮忙....

EDIT : Table structure+data , SQL FILE 编辑:表结构+数据, SQL文件

Please try this query 请尝试此查询

SELECT routes.route_name,
       CONCAT(startstop.stop_latitude,",",startstop.stop_longitude) as start_pt,
       CONCAT(endstop.stop_latitude,",",endstop.stop_longitude) as end_pt,
       routes.total_stop
FROM routes
INNER JOIN route_stop as routestart ON (routestart.route_id=routes.route_id AND routestart.stop_position = 1)
INNER JOIN route_stop as routeend ON (routeend.route_id=routes.route_id AND routeend.stop_position = routes.total_stop)
INNER JOIN stops as startstop ON (startstop.stop_id=routestart.stop_id)
INNER JOIN stops as endstop ON (endstop.stop_id=routeend.stop_id)

Could you try this query : 你能试试这个问题:

SELECT routes.route_id,routes.route_name, starts.start_pt, ends.end_pt, routes.total_stop
FROM routes
JOIN route_stop ON routes.route_id = route_stop.route_id
JOIN (
    SELECT stops.stop_id,CONCAT(stops.stop_latitude,",",stops.stop_longitude) as start_pt
    FROM stops
    JOIN route_stop ON stops.stop_id = route_stop.stop_id
    WHERE route_stop.stop_position = 1
) as starts ON starts.stop_id = route_stop.stop_id
JOIN (
    SELECT stops.stop_id,CONCAT(stops.stop_latitude,",",stops.stop_longitude) as end_pt
    FROM stops
    JOIN route_stop ON stops.stop_id = route_stop.stop_id
    JOIN routes ON routes.route_id = route_stop.route_id
    WHERE route_stop.stop_position = routes.total_stops
) as ends ON ends.stop_id = route_stop.stop_id

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM