#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
, …) из моего запроса для большей ясности.
Совет профессионала: при написании запросов делайте все возможное, чтобы понять структуру сущностей-отношений ваших данных. Когда вы понимаете это, гораздо проще писать правильные запросы.