【问题标题】:SQL Multiple Tables join one to many relationshipSQL 多表连接一对多关系
【发布时间】:2014-01-03 00:48:43
【问题描述】:

您好,我有 3 张桌子,例如

1) 餐桌路线

route_id
route_name
total_stop

2) 餐桌停靠点

stop_id
stop_name
stop_address
stop_latitude
stop_longitude

3) 表 route_stop

route_id
stop_id
stop_position

我的查询是

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 ;

这里end_pt 列返回NULL,我在这里做错了什么。请帮忙....

编辑:表结构+数据,SQL FILE

【问题讨论】:

  • 不确定这是答案还是错字,但在您的子查询中您引用了routes.total_stop,而您使用名为total_stops(复数)的列定义了表。
  • 另外,您能否提供每个表中的数据样本以及您当前获得的输出。
  • stops.stop_latitude 或stops.stop_longitude 是否包含NULL?
  • @aaroncatlin 我的错误,我已经编辑了
  • 考虑提供适当的 DDL 和/或 sqlfiddle 以及所需的结果集

标签: mysql sql join


【解决方案1】:

请试试这个查询

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)

【讨论】:

    【解决方案2】:

    你能试试这个查询吗:

    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
    

    【讨论】:

      猜你喜欢
      • 2017-09-04
      • 2023-03-04
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      相关资源
      最近更新 更多