Мне нужно объединить следующие три оператора 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
Вы можете использовать приведенный ниже запрос для достижения целей, которые вы упомянули, я также позаботился о квадратных скобках для ключевых слов, потому что 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}
Вы можете объединить выше один запрос в один запрос, как показано ниже MYSQL Query:
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;
Измените имена столбцов, как у вас в связанных таблицах.
Попробуйте что-то вроде этого:
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
Service
,Session
&Type
?