#sql #db2 #union
#sql #db2 #объединение
Вопрос:
Мой запрос для получения человека и информации о его друге или родителе:
select civils.name, friends.fullName as full_name, friends.age as age, friends.height as height
from (query to get list people in city) as civils
inner join friends on civils.friendId = friends.Id and friends.name = "John"
union
select civils.name, parents.fullName as full_name, parents.age as age, parents.height as height
from (query to get list people in city) as civils
inner join parents on civils.parentId = parents.Id and parents.name = "John"
Но я не хочу тратить ресурсы на повторное получение civils. Как получить данные списка за один раз и использовать их для двух внутренних объединений, подобных этому:
select civils.name, full_name, age, height from (query to get list people in city) as civils
inner join friends on civils.friendId = friends.Id and friends.name = "John"
union
inner join parents on civils.parentId = parents.Id and parents.name = "John"
Я использую DB2.
Обновлено: Извините за неясный вопрос, я ожидаю, что результат будет выглядеть следующим образом:
civils.name | full_name | age | height
Но если бы я попробовал решения, подобные предложенным ответам, формат результата был бы:
civils.name | friends.full_name | friends.age | friends.height | parents.full_name | parents.age | parents.height
и мне нужно сделать еще один шаг, чтобы преобразовать этот список в мой ожидаемый формат list.
Ответ №1:
Я немного обеспокоен тем, что вы можете делать в своей civils
ссылке, но вы можете обернуть это как CTE:
WITH Civil_List AS (<query to get list people in city>)
SELECT Civils.name, Friends.full_name, Friends.age, Friends.height
FROM Civils_List
JOIN Friends
ON Friends.id = Civils_List.friendId
AND Friends.name = 'John'
UNION
SELECT Civils.name, Parents.full_name, Parents.age, Parents.height
FROM Civils_List
JOIN Parents
ON Parents.id = Civils_List.friendId
AND Parents.name = 'John'
Комментарии:
1. Если у вас нет способа сделать это в одном запросе, я буду использовать ваш запрос. Это охватывает все случаи.
2. @qmn1711 — Список желаемых результатов был важной информацией. Изначально мы думали, что вы просто ищете существование этих записей, а не какие-либо значения из них (или необходимый формат).
3. да, я пропустил эту важную информацию. Я использовал ваш запрос в своем приложении, спасибо!