Объединение нескольких операторов SELECT в одном запросе - PullRequest
0 голосов
/ 31 марта 2020

У меня есть таблица «Locations», которая выглядит следующим образом:

   ID   lat     lng
0   0   -121    41
1   1   -122    42
2   2   -123    43
3   3   -124    44

И еще одна таблица с именем «Segments» выглядит следующим образом:

   ID    StartID  EndID
0   0    0        1
1   1    0        3
2   2    2        3
3   3    3        1

Начало и конец Идентификаторы ссылаются на идентификаторы в таблице «Locations»

Мне нужен один запрос, который собирает значения lat и lng из таблицы Locations для идентификатора начала и конца и возвращает таблицу, которая выглядит следующим образом:

   ID    StartID  StartLat  StartLng  EndID  EndLat  EndLng
0   0    0        -121      41        1      -122    42
1   1    0        -121      41        3      -124    44
2   2    2        -123      43        3      -124    44
3   3    3        -124      44        1      -122    42

Вот запрос, который я пытаюсь выполнить:

SELECT 
    lat as StartLat, lng as StartLng
FROM Locations
WHERE ID = (
    SELECT ID as StartID
    FROM Segments
)
UNION
SELECT 
    lat as EndLat, lng as EndLng
FROM Locations
WHERE ID = (
    SELECT ID as EndID
    FROM Segments
)

Но это только дает мне StartID, StartLat и StartLng, а не объединяет их в одну таблицу, как я ожидаю с помощью Union заявление. Что мне не хватает? Спасибо за помощь !!

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Похоже, вам просто нужна пара LEFT JOINS:

SELECT 
  s.ID, 
  s.StartID, ls.lat AS StartLat, ls.lng AS StartLng, 
  s.EndID, le.lat AS EndLat, le.lng AS EndLng 
FROM Segments s
LEFT JOIN Locations ls ON s.StartID = ls.ID -- Start info
LEFT JOIN Locations le ON s.EndID = le.ID -- End info
1 голос
/ 31 марта 2020

Вам нужно join вместо Union.

  select
    s.*,
    startLocation.lat AS StartLat,
    startLocation.lng AS StartLng,
    endLocation.lat AS EndLat,
    endLocation.lng AS EndLng
  from
    Segments s
    left join Locations startLocation on s.startID = startLocation.ID
    left join Locations endLocation on s.EndID = endLocation.ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...