【问题标题】:How would I combine these 2 SQL statement?我将如何组合这 2 个 SQL 语句?
【发布时间】:2021-03-15 20:20:53
【问题描述】:
select to4.ProportionOfRoute, to4.RouteID 
from tbl_operatorrouterelation to4 
where to4.operatorID = (
    select to2.operatorid 
    from tbl_operatordesc to2 
    where to2.Name = "OK Travel"
)


select tr.Frequency, tr.routeID
from tbl_route tr
where tr.routeID IN (
    select to3.RouteID 
    from tbl_operatorrouterelation to3 
    where to3.operatorID = (
        select to2.operatorid 
        from tbl_operatordesc to2 
        where to2.Name = "OK Travel"
    )
)

所以第一个从具有多个唯一 RouteID 的表中选择值。第二个从具有相同 RouteID 的另一个表中选择值。

我需要将 ProportionOfRoute 与相应的频率值组合在一起,所以这一切都必须在一个查询中。

谢谢!我已经为此工作了 2 天了

【问题讨论】:

  • 您需要INNER JOIN 表而不是单独查询。这将结合两个查询并删除两个 IN 子选择。

标签: mysql join subquery dbeaver


【解决方案1】:

这一系列的 JOIN 操作应该做你想做的事。

SELECT tbl_operatorrouterelation.ProportionOfRoute, 
       tbl_route.RouteId,
       tbl_route.Frequency
  FROM tbl_operatordesc 
  JOIN tbl_operatorrouterelation 
         ON tbl_operatordesc.operatorID = tbl_operatorrouterelation.operatorID
  JOIN tbl_route 
         ON tbl_route.routeID = tbl_operatorrouterelation.routeID
 WHERE tbl_operatordesc = "OK Travel";

看起来您的架构(您的表格布局)有两个entitiesrouteoperatordesc。看起来他们之间有一个many-to-many relationship,存储在您的operatorrouterelation 表中:如果操作员处理一条路线,则该表中有一行包含operatorIDrouteID。这意味着一个运算符可能有多个路由,而一个路由可能有多个运算符。

因此,当您要检索名为“OK Travel”的运营商信息(包括有关他们运营的路线的信息)时,您可以从 tbl_operatordesc 开始。然后将其加入tbl_operatorrouterelation,然后从那里加入tbl_route

为了清楚起见,我从查询中删除了所有表别名(t02t03、...)。

专业提示:在编写查询时,请尽力了解数据的entity-relationship structure。当您理解它时,编写正确的查询会容易得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多