Объединение нескольких операторов SQL SELECT в один - PullRequest
0 голосов
/ 03 января 2019

Мне нужно объединить следующие три оператора SELECT в один оператор SQL:

1. SELECT TotalTime FROM Session WHERE device_uid = ${my_uid} ORDER BY StartTime DESC LIMIT 1;

2. SELECT HoursAtService FROM Service WHERE device_uid = ${my_uid} ORDER BY StartTime DESC LIMIT 1;

3. SELECT ServiceHours FROM Type WHERE type_uid = ${my_type_uid};

Предпочтительно, я хочу получить свой результат в виде одной строки со следующими полями:

Result:
----------------------------------------------------------------
uid, TotalTime, HoursAtService, ServiceHours

Я думаю, что мне, вероятно, нужно выполнить внутреннее соединение, но я не уверен на 100%, как к нему подойти. Что-то вроде:

SELECT uid, TotalTime, HoursAtService, ServiceHours FROM Device AS t1 INNER JOIN (... -> continues

Выполнить объединение между таблицами достаточно просто, но как вы подходите к объединению с несколькими предложениями WHERE для различных таблиц?

Может ли кто-нибудь показать мне, как я структурирую запрос?

РЕДАКТИРОВАТЬ - Схемы таблиц

Device:
---------------------
device_uid, type_uid, ....

Session:
---------------------
device_uid, session_uid, TotalTime, StartTime, EndTime, SessionTime

Service:
---------------------
device_uid, service_uid, StartTime, EndTime, HoursAtService

Type:
---------------------
type_uid, Name, ServiceHours

Ответы [ 3 ]

0 голосов
/ 03 января 2019

Попробуйте что-то вроде этого:

SELECT ${my_uid} AS uid,
       (SELECT TotalTime FROM Session WHERE uid = ${my_uid} ORDER BY StartTime DESC LIMIT 1) AS TotalTime,
       (SELECT HoursAtService FROM Service WHERE udi = ${my_uid} ORDER BY StartTime DESC LIMIT 1) AS HoursAtService,
       (SELECT ServiceHours FROM Type WHERE type_uid = ${my_type_uid) AS ServiceHours
0 голосов
/ 03 января 2019

Вы можете использовать приведенный ниже запрос для достижения целей, которые вы упомянули, я также позаботился о квадратных скобках для ключевых слов, потому что service и session являются ключевыми словами SQL.

SELECT 
    [Device].Type_uid AS DeviceTypeId, [Device].Device_uid AS DeviceId, [Session].TotalTime, [Service].HoursAtService, [Type].ServiceHours 
FROM 
    [Session] INNER JOIN [Device] ON [Session].Device_uid = [Device].Device_uid 
    [Service] INNER JOIN [Device] ON [Service].Device_uid = [Device].Device_uid
    [Type] INNER JOIN [Device] ON [Type].Type_uid = [Device].Type_uid
WHERE
    [Device].Type_uid = ${my_type_uid} AND [Device].Device_uid = ${my_uid}
0 голосов
/ 03 января 2019

Вы можете объединить вышеуказанные одиночные запросы в один запрос, как показано ниже. Запрос MYSQL:

SELECT Session.uid, Session.TotalTime, Service.HoursAtService, ServiceHours.ServiceHours
FROM Session 
JOIN Service ON Service.udi = Session.uid
JOIN ServiceHours ON ServiceHours.type_uid = Session.uid
WHERE Session.uid = ${my_uid}
ORDER BY Session.StartTime DESC LIMIT 1; 

Измените имена столбцов, как в связанных таблицах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...