Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Mysql如何连接这些表

Mysql如何连接这些表
EN

Stack Overflow用户
提问于 2014-04-06 05:58:18
回答 2查看 81关注 0票数 0

我有以下表格和样本数据。

代码语言:javascript
运行
AI代码解释
复制
SCHEDULE TABLE
fightno   day_of_week  orgin    dest  depart_time   arrive_time     totalfare
AQ2131    WED          BLR      KTA   04:30         11:00           6000

FLIGHT_STOPS (if it have stops)
flightno  day_of_week  airport_code   arrival_time  departure_time  stopmilesfare
AQ2131    WED          BOM            02:17         05:40           3000 
AQ2131    WED          COH            03:17         06:40           3000 
AQ2131    WED          GOY            04:17         08:40           3000

航线为BLR -> BOM -> COH -> GOY -> KTA

我如何加入这些表,以便如果用户输入其中任何一个作为源和目标,则检索flightno。例如,如果用户输入BLR作为源,COH作为目的地,COH作为源,GOY作为目的地,我们可以找到航班号。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-07 04:13:31

首先,让我们退一步。航班只是从A到D的一个方向,或D到A的方向,这两个不同的航班号。你必须有正确的方向相关性才能得到正确的飞行。笑一笑,想象中的国脚

代码语言:javascript
运行
AI代码解释
复制
Flight #123 From Country A -> B -> C -> D.
Flight #987 From Country D -> C -> B -> A.

两次旅行都有“C”和“B”..。但是如果我们的旅程是从'C‘开始,以'B’结束的话,你需要987次航班,因为你需要在'C‘的飞机上,然后在'B’停--在那个方向。123号航班会失败,因为你会在'A‘下在'B’和到达'C‘站被接上。我将使用'CCC‘和'BBB’只是为了遵守3字符机场代码与查询。

第一个查询(它将是UNION的一部分)获取从给定位置开始的所有航班.无论是目的地还是行程的其中一条腿,目的地都是所需的'BBB‘位置。通过在相同的航班和目的地机场代码上使用左/连接,如果它不是空的,那么就有一条腿到那个目的地。

代码语言:javascript
运行
AI代码解释
复制
SELECT 
      s1.flightNo
   from 
      schedule s1
         LEFT JOIN flight_stops fs1
            ON s1.flightNo = fs1.flightNo
            AND fs1.airport_code = 'BBB'
   where 
          s1.origin = 'CCC'
      AND (    s1.dest = 'BBB'
           OR fs1.flightNo IS NOT NULL )

下一个查询( UNION ALL one)将得到从其他地方开始的任何航班,该航班有一条腿作为旅程的开始飞行(CCC)。然后,它将加入进度表,看看航班的目的地是否是“BBB”。如果不是那样的话,那么也可以再看一次航班停止表,但特别是对于“BBB”来说,“BBB”的到达时间在“CCC”开始飞行时间之后。

代码语言:javascript
运行
AI代码解释
复制
SELECT 
      fs1.flightNo
   from 
      flight_stops fs1
         LEFT JOIN schedule s2
             ON fs1.flightNo = s2.flightNo
            AND s2.dest = 'BBB'

         LEFT JOIN flight_stops fs2
             ON fs1.flightNo = fs2.flightNo
            AND fs1.arrival_time < fs2.arrival_time
            AND fs2.airport_code = 'BBB'
   where 
      fs1.airport_code = 'CCC'

既然我们得到的只是航班号,那就把这两个航班联合起来。既然一架飞机不能同时起飞,又不能同时成为一条腿,他们就永远不会拉同一架飞机。如果你想要实际的其余的航班信息,你也可以结束。

因此,对航班的最后查询将是

代码语言:javascript
运行
AI代码解释
复制
(first select above)
UNION ALL
(second select above)

有航标信息..。

代码语言:javascript
运行
AI代码解释
复制
SELECT
      s.*
   from
      ( (first select above)
         UNION ALL
         (second select above) ) QualFlights
      JOIN Schedule s
         ON QualFlights.flightNo = s.flightNo

现在,所有这一切,如果您的flight_stops表包含了原产地和目的地位置,就会容易得多。然后,整个查询可以简化为并在flight_stops上有一个索引.(airport_code、flightNo、arrival_time )

代码语言:javascript
运行
AI代码解释
复制
  SELECT 
          fs1.flightNo
       from 
          flight_stops fs1
             LEFT JOIN flight_stops fs2
                 ON fs1.flightNo = fs2.flightNo
                AND fs1.arrival_time < fs2.arrival_time
                AND fs2.airport_code = 'BBB'
       where 
          fs1.airport_code = 'CCC'

是的..。这是一个查询,您基本上需要的是在table表的“腿”中同时包含起始点和目的地。

票数 1
EN

Stack Overflow用户

发布于 2014-04-06 08:25:07

这是使用CTE和ROW_NUMBER来代表缺少的LegNo的TSQL。我现在没有时间把它翻译成MySQL,但是在LegNo已经存在的情况下,这是非常容易的。

另外,ISNULL(x,y)不是MySQL,但是当x为NULL时,则应该转换为y。

代码语言:javascript
运行
AI代码解释
复制
CREATE TABLE Schedule (FlightNo CHAR(6), Week_Day CHAR(3), Origin CHAR(3), Dest CHAR(3), Time_Depart Time, Time_Arrive Time)
CREATE TABLE Flight_Stop (FlightNo CHAR(6), Week_Day CHAR(3), Airport CHAR(3), Time_Arrive Time, Time_Depart Time)

INSERT INTO Schedule VALUES 
 ('AQ2131','WED','BLR','KTA','01:30','11:00')
,('AB1234','TUE','AAA','BBB','01:00','02:00')
INSERT INTO Flight_Stop VALUES 
 ('AQ2131','WED','BOM','02:17','05:40')
,('AQ2131','WED','COH','03:17','06:40')
,('AQ2131','WED','GOY','04:17','08:40')

WITH cte AS (
  SELECT *
        ,ROW_NUMBER() OVER (PARTITION BY FlightNo, Week_Day ORDER BY Time_Arrive) LegNo 
    FROM Flight_Stop
)
SELECT s.FlightNo
      ,s.Week_Day
      ,s.Origin
      ,ISNULL(f.Airport,s.Dest) Dest
      ,0 LegNo
  FROM Schedule s
       LEFT JOIN
       cte f ON s.FlightNo = f.FlightNo
            AND s.Week_Day = f.Week_Day
 WHERE ISNULL(f.LegNo,1) = 1
UNION 
SELECT s.FlightNo
      ,s.Week_Day
      ,s.Origin
      ,ISNULL(f.Airport,s.Dest) Dest
      ,f.LegNo
  FROM Schedule s
       LEFT JOIN
       cte f ON s.FlightNo = f.FlightNo
            AND s.Week_Day = f.Week_Day
 WHERE f.LegNo = (SELECT MAX(LegNo)
                    FROM cte a 
                   WHERE a.FlightNo = f.FlightNo
                     AND a.Week_Day = f.Week_Day)
UNION
SELECT a.FlightNo
      ,a.Week_Day
      ,a.Airport
      ,b.Airport
      ,a.LegNo
  FROM cte a
       INNER JOIN
       cte b ON a.FlightNo = b.FlightNo
            AND a.Week_Day = b.Week_Day
            AND a.LegNo + 1 = b.LegNo
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22895022

复制
相关文章
【HTML5】HTML5 新增 input 表单 ( 邮箱输入表单 | 网址输入表单 | 日期输入表单 | 时间输入表单 | 电话输入表单 | 搜索栏输入表单 | 颜色选择器输入表单 )
一、HTML5 新增 input 表单 ---- HTML5 新增 input 表单 : 邮箱输入表单 : 必须输入邮箱 , 如果输入格式错误 , 提交时会在对话框中报错 ; <input type="email" /> URL 输入表单 : 只能输入网址 , 格式错误会在对话框中报错 ; <input type="url" /> 日期输入表单 : 右侧的下拉菜单选择日期 ; 如果在手机中打开 , 会弹出手机中自带的日期选择对话框 ; <input type="date" /> 时间输入表
韩曙亮
2023/04/24
3.4K0
【HTML5】HTML5 新增 input 表单 ( 邮箱输入表单 | 网址输入表单 | 日期输入表单 | 时间输入表单 | 电话输入表单 | 搜索栏输入表单 | 颜色选择器输入表单 )
HTML 表单和输入
表单元素是允许用户在表单中输入内容,比如:文本域(textarea)、下拉列表、单选框(radio-buttons)、复选框(checkboxes)等等。
用户8442333
2021/08/21
2K0
在HTML中如何使用CSS?
一、前言 在 HTML 中使用 CSS,包括内联式、内嵌式、链接式和导入式。 二、分类 2.1 内联式 内联式是所有样式应用方式中最为直接的一种,它通过对 HTML 标记使用 属性,将 CSS 代码直接写在其中。 内联式是最简单、直接的 CSS 使用方法,但它的针对性很明显,只能作用于当前标记,造成代码冗余,维护比较困难。 2.2 内嵌式 内嵌式与内联式使用方法不同,它将 CSS 代码写在 标记之间,并需要采用 标记进行声明。 使用内嵌式 CSS 用法时 CSS 代码将被集中放在 标记中,这样方便查
企鹅号小编
2018/02/01
8.6K0
AngularJS中使用表单输入的应用设计
在Angular中使用表单元素非常方便。正如我们在前面几个例子中看到的,你可以使用ng-model属性把元素绑定到你的模型属性上。这一机制对于所有标准的表单元素都可以起作用,例如文本框、单选按钮、复选
企鹅号小编
2018/01/08
2.1K0
AngularJS中使用表单输入的应用设计
php将表单中数据传入到数据库
1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 4 <title>无标题文档</title> 5 </head> 6 7 <body> 8 <form action="" method="post">//创建表单 9 姓名 10 <input type="text" name="str"> 11 <input type="submit" name="submit
码缘
2019/09/11
2.2K0
HTML中的表单
表单的用途很多。表单的用途主要用来收集客户端提供的相关信息,是网页具有相互交互的功能,是用户与网站实现交互的重要手段。当用户填写完信息后做提交操作,将表单的信息从客户端的浏览器传送到服务器上,经过服务器处理后,再将用户所需要的信息传送回客户端的浏览器上。在网页中,最常见的表单形式有文本框,密码文本框,单选按钮,复选框,按钮(普通,提交,重置),文件域或图像域,文本域和列表(菜单)。
小末快跑
2019/07/03
5.4K0
如何使用JS将 HTML 页面或表单转化为 PDF文档
PDF 是一种流行的文件格式,我们用来在不同平台和设备上呈现和共享具有固定布局的文档。
前端达人
2023/08/31
5920
如何使用JS将 HTML 页面或表单转化为 PDF文档
通过Bootstrap 输入框组,表单控件的使用案例
Bootstrap 支持的另一个特性,输入框组。输入框组扩展自 表单控件。使用输入框组,您可以很容易地向基于文本的输入框添加作为前缀和后缀的文本或按钮。
好派笔记
2021/09/18
2K0
layui表单提交参数如何传递_HTML中form表单数据提交方式
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/08
3.3K0
如何是HTML页面中的表单居中显示[通俗易懂]
在进行前端页面设置的时候,发现写完的form表单始终无法居中显示,详细如图1所示:
全栈程序员站长
2022/09/20
7.8K0
如何是HTML页面中的表单居中显示[通俗易懂]
如何创建HTML表单?html表单代码怎么写[通俗易懂]
html表单代码是什么?如何创建HTML表单?这些对于新手会感到陌生,下面我们为你总结一下html表单代码怎么写?以及html表单的创建?
全栈程序员站长
2022/09/22
6.7K0
数据是如何输入到神经网络中
我们在做深度学习任务的时候,总会有这样的困惑? 比如我们做的CV项目,那么我们采集的图像数据集是如何输入到神经网络中去的呢?图像中的特征又是如何提取的呢?
杨鹏伟
2022/07/17
7540
数据是如何输入到神经网络中
如何使用 Tailwind CSS 设计高级自定义动画
Tailwind CSS,一款流行的实用型CSS框架,提供了一套强大的工具,可以轻松地创建令人惊艳的动画效果。
前端达人
2023/08/31
1.8K0
如何使用 Tailwind CSS 设计高级自定义动画
如何仅使用 JavaScript 将任何 HTML 页面或表单转化为 PDF文件
PDF 是一种流行的文件格式,我们用来在不同平台和设备上呈现和共享具有固定布局的文档。
winty
2023/08/23
1.6K0
如何仅使用 JavaScript 将任何 HTML 页面或表单转化为 PDF文件
将pandas数据显示到现有的flask html表中
2 pandas读写数据库 在python连接好数据库后,pandas可以利用read_sql()方法将数据读入DataFrame。这里可以看一下代码。
赵云龙龙
2020/12/15
4.3K0
将pandas数据显示到现有的flask html表中
如何使用免费控件将Word表格中的数据导入到Excel中
我通常使用MS Excel来存储和处理大量数据,但有时候经常会碰到一个问题—我需要的数据存储在word表格中,而不是在Excel中,这样处理起来非常麻烦,尤其是在数据比较庞大的时候,
全栈程序员站长
2022/07/05
4.4K0
如何使用免费控件将Word表格中的数据导入到Excel中
6.HTML输入表单标签元素介绍
描述: 表单是一个包含表单元素的区域,表单元素是允许用户在表单中输入内容,其包含 文本框、文本域(textarea)、按钮、下拉列表、单选框(radio-buttons)、复选框(checkboxes)等元素都要放在form标签里面或者进行form的id值的调用,否则提交的数据到不了后端。
全栈工程师修炼指南
2023/03/21
4.7K0
表单提交后端如何接收数据_html怎么接收表单提交的内容
然而,我们可以采取引入模块的做法来简化原生代码,并且可以实现文件上传的: 首先,我们需要在cmd或者powershell中安装这个模块:
全栈程序员站长
2022/11/08
5.9K0
表单提交后端如何接收数据_html怎么接收表单提交的内容
点击加载更多

相似问题

将HTML表单数据发布到Google电子表格

10

如何使用Google电子表格作为后端创建HTML数据输入表单

45

如何将数据从google表单输入到

12

将HTML表单发布到Google Docs电子表格

12

如何通过java将数据发布到html表单?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文