Объединение нескольких операторов SQL SELECT в один

0

Мне нужно объединить следующие три оператора 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
  • 0
    показать схему таблиц
  • 0
    Какова связь между таблицами Service , Session & Type ?
Теги:
join

3 ответа

0

Вы можете использовать приведенный ниже запрос для достижения целей, которые вы упомянули, я также позаботился о квадратных скобках для ключевых слов, потому что 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
    Это не правильный синтаксис MySQL
  • 0
    @Nick - Итак, я дал решение в соответствии с SQL Server, но должно работать и для MySql. Не могли бы вы помочь мне указать на проблему в приведенном выше запросе?
Показать ещё 1 комментарий
0

Вы можете объединить выше один запрос в один запрос, как показано ниже 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; 

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

  • 0
    Привет, мне нужно сделать ORDER BY для таблиц Session и Service, хотя. Это означает, что StartTime в этих таблицах будет отличаться, но ORDER BY должен применяться к обоим. Будет ли это покрыто?
  • 0
    Да, вы можете применить порядок к нескольким столбцам, таким как Session.column_name DESC, Service.column_name ASC
0

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

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
    Спасибо за это! Что делает синтаксис & {my_uid}? У меня есть переменная uid, на которую я ссылаюсь как $ {my_uid} (javascript), но я немного не уверен в синтаксисе &
  • 0
    Просто опечатка, отредактировано.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню