Как бы мне объединить эти 2 SQL-инструкции?

#mysql #join #subquery #dbeaver

#mysql #Присоединиться #подзапрос #dbeaver

Вопрос:

 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.

Мне нужно умножить ProportionOfRoute на соответствующие значения частоты вместе, чтобы все это было в одном запросе.

Спасибо! Я работаю над этим уже 2 дня

Комментарии:

1. Вам нужно обращаться к INNER JOIN таблицам, а не выполнять отдельные запросы. Это объединит оба запроса и удалит оба IN подвыбора.

Ответ №1:

Эта последовательность операций объединения должна делать то, что вы хотите.

 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";
 

Похоже, что ваша схема (ваш макет таблицы) имеет две сущности, route и operatordesc . Похоже, что между ними существует связь «многие ко многим«, которая хранится в вашей operatorrouterelation таблице: если оператор обрабатывает маршрут, в этой таблице есть строка, содержащая как the operatorID , так и the routeID . Это означает, что у оператора может быть несколько маршрутов, а у маршрута может быть несколько операторов.

Итак, когда вы хотите получить информацию об операторе с именем «OK Travel», включая информацию о маршрутах, с которых они работают, вы начинаете tbl_operatordesc . Затем вы присоединяете его к tbl_operatorrouterelation , и оттуда вы присоединяетесь к tbl_route .

Я удалил все псевдонимы таблиц ( t02 , t03 , …) из моего запроса для большей ясности.

Совет профессионала: при написании запросов делайте все возможное, чтобы понять структуру сущностей-отношений ваших данных. Когда вы понимаете это, гораздо проще писать правильные запросы.