【问题标题】:How to join three database tables in sqlsql中如何连接三个数据库表
【发布时间】:2017-12-20 10:31:16
【问题描述】:

我有这三个数据库表

CREATE TABLE IF NOT EXISTS `bus_info` (
  `bus_id` int(11) NOT NULL,
  `bus_no` varchar(20) NOT NULL
)


INSERT INTO `bus_info` (`bus_id`, `bus_no`) VALUES
(1, 'Mh10 BD 5209');

CREATE TABLE IF NOT EXISTS `route_info` (
  `route_id` int(11) NOT NULL,
  `route_name` varchar(100) NOT NULL,
  `latitude` varchar(200) NOT NULL,
  `longitude` varchar(200) NOT NULL
)


INSERT INTO `route_info` (`route_id`, `route_name`, `latitude`, `longitude`) VALUES
(1, 'Sangli Stand', '16.852903', '74.562999'),
(2, 'Maruti Chowk', '16.858100', '74.562460'),
(3, 'Ganpati Mandir', '16.862211', '74.559501'),
(4, 'College Corner ', '16.862854', '74.576579'),
(5, 'Ram Mandir ', '16.856413', '74.574738'),
(6, 'D mart', '16.845782', '74.576866'),
(7, 'Vishrambag sangli', '16.846022', '74.602854'),
(8, 'Bharat Mill', '16.865029', '74.607000'),
(9, 'Bharti hospital', '16.840008', '74.618400'),
(10, 'SBGI', '16.835329', '74.624400');

CREATE TABLE IF NOT EXISTS `route_detail` (
  `rd_id` int(11) NOT NULL,
  `bus_id` int(11) NOT NULL,
  `route_id` int(11) NOT NULL
)

INSERT INTO `route_detail` (`rd_id`, `bus_id`, `route_id`)
    VALUES (1, 1, 1),
           (2, 1, 2);

我正在为单辆巴士分配一条特定路线,单辆巴士可能有多条路线,然后我需要一个查询来为所选巴士选择路线

例如:

从 route_detail 表中的数据库中,为同一辆巴士分配了两条路线,然后我需要上面三个表中的列

bus_id,bus_no, route_id,latitude,longitude

【问题讨论】:

    标签: sql database left-join inner-join outer-join


    【解决方案1】:

    我已经做到了.....

    SELECT 
        bus_info.bus_no, route_detail.route_id, route_info.latitude, 
        route_info.longitude 
    FROM 
        (bus_info 
    INNER JOIN 
        route_detail ON bus_info.bus_id = route_detail.bus_id) 
    INNER JOIN 
        route_info ON route_detail.route_id = route_info.route_id 
    

    【讨论】:

      【解决方案2】:

      确切的语法取决于您使用的数据库。要在 Oracle 中执行此操作,我希望编写这样的查询;

      select a.bus_id, a.bus_no, c.route_id, c.latitude, c.longitude
      from
      bus_info a join
      route_detail b on a.bus_id = b.bus_id
      route_info c on b.route_id = c.route_id
      where {alias.column_name} {operator} {operand};
      

      您需要为每个要加入的表创建一个加入语句。 每个连接都通过在要连接的两个表上查找匹配的键来工作。 使用表别名(a、b、c 等)来保持查询简洁。 所有连接的结果是一张大表,您可以以正常方式从中查询。 我无法从您的问题中确切地知道您想了解每辆巴士的哪些信息,因此内部或外部连接可能对您更有利。默认情况下,内部连接已完成,这意味着仅包含与所有查询条件匹配的行。从广义上讲,外部连接会带来更多的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-03
        • 1970-01-01
        • 1970-01-01
        • 2021-03-21
        • 2016-06-19
        • 2018-02-07
        • 1970-01-01
        相关资源
        最近更新 更多