2015-05-12 8 views
1

Я пытаюсь сделать запрос, который возвращает результат двух разных запросов.SQL Query в зависимости от другого запроса

У меня есть этот один:

SELECT idtravel, travel, status FROM travel_db.travel 
inner join travel_db.status 
on travel.status_idstatus=status.idstatus 
order by idtravel desc 

вернуться:

idtravel | travel | status 
1   London Completed 
2   NY  Planned 
3   Lisbon Completed 

имеют Также этот запрос:

select sum(value) as total 
from 
(select a.value 
from desp_housing a 
where travel_idtravel = 1 
union all 
select t.value 
from desp_transport t 
where travel_idtravel = 1 
union all 
select tu.value 
from desp_turism tu 
where travel_idtravel = 1 
) z 

, который возвращает:

Value 
600 

Моя цель объединить эти два querys иметь что-то вроде этого:

idtravel | travel | status | Value 
1   London Completed 600 
2   NY  Planned  1500 
3   Lisbon Completed 150 

Может кто-нибудь помочь?

* Редактировать 13-05-15: После некоторых идей, я нахожусь в одном поле от моего конечного результата. Вот где я нахожусь:

select idtravel, travel, sum(value) as total 
from travel_db.travel 
inner join 
(select a.travel_idtravel, a.value 
from desp_housing a 
union all 
select t.travel_idtravel, t.value 
from desp_transport t 
union all 
select tu.travel_idtravel, tu.value 
from desp_turism tu 
union all 
SELECT idtravel, travel 
FROM travel_db.travel 
) z 
on travel.idtravel=z.travel_idtravel 
group by travel_idtravel 

вернуться:

idtravel | travel | value 
1   London 600 
2   NY  1500 
3   Lisbon 150 

Это только отсутствует поле статус

* Редактировать 14-05-15: Ребята, это, наконец завершено.

Вот окончательный запрос:

Select idtravel, travel, sum(value) as total, status 
From travel_db.travel 
inner join 
(select a.travel_idtravel, a.value, a.status_idstatus 
from desp_housingo a 
union all 
select t.travel_idtravel, t.value, t.status_idstatus 
from desp_transport t 
union all 
select tu.travel_idtravel, tu.value, t.status_idstatus 
from desp_turism tu 
union all 
select idtravel, travel, status_idstatus 
from travel_db.travel 
) z 
on travel.idtravel=z.travel_idtravel 
inner join travel_db.status 
on travel.status_idstatus=status.idstatus 
group by travel_idtravel 

возвращения:

idtravel | travel | value | status 
    1   London 600 | Completed 
    2   NY  1500| Planned 
    3   Lisbon 150 | Completed 

Дело в том, из-за того, как сделан запрос необходимо выбрать поля, которые вы не собираетесь использовать (а .status_idstatus, t.status_idstatus, t.status_idstatus), чтобы обеспечить одинаковое количество полей. Может быть, может быть оптимизирован, но пока работает.

ответ

2

Как насчет этого?

SELECT idtravel, travel, status, 
     (SUM(desp_housing.value)+SUM(desp_transport.value)+SUM(desp_turism.value)) as Value 
FROM travel_db.travel 
INNER JOIN travel_db.status 
ON travel.status_idstatus=status.idstatus 
INNER JOIN desp_housing 
ON desp_housing.travel_idtravel=idtravel 
INNER JOIN desp_transport 
ON desp_transport.travel_idtravel=idtravel 
INNER JOIN desp_turism 
ON desp_turism.travel_idtravel=idtravel 
GROUP BY idtravel 
ORDER BY idtravel desc 

или заменить INNER JOIN с LEFT JOIN, если ваши вторичные столбцы не могут иметь значение для всех туристических идентификаторов.

+0

выполним, но вам нужно, по крайней мере, чтобы подвести и группу по где-то ... –

+0

Танков, он решает полбеды ... Его возвращение идентификатора | путешествия | статус | стоимость 20 Budapeste Планирование null 19 Лиссабон Завершено 5000 , так что делаете, это значение ...но его добавление первого значения для первого идентификатора и первого цикла (desp_housing) и добавление со всеми входами других таблиц ... –

+0

Вам нужно добавить GROUP BY idtravel. Я обновлю свой ответ. – burhan

0

Предполагая, что поле idtravel принадлежит travel_db.travel и служит внешним ключом для всех desp таблиц.

SELECT travel.idtravel, travel, status, 
     SUM(desp_housing.value + desp_transport_value + desp_tourism.value) 
FROM travel_db.travel 
INNER JOIN travel_db.status ON travel.status_idstatus = status.idstatus 
LEFT JOIN desp_housing ON travel.idtravel = disp_housing.travel_idtravel 
LEFT JOIN desp_transport ON travel.idtravel = desp_transport.travel_idtravel 
LEFT JOIN desp_turism ON travel.idtravel = desp_turism.travel_idtravel 
GROUP BY travel.idtravel 
ORDER BY reavel.idtravel DESC 
+0

танки, такие же, как burhan, он решает половину проблемы ... Его возвращаемый id | путешествия | статус | значение 20 Будапеш Планирование нулевой 19 Лиссабон Завершено 5000, так что делает значение ... но добавляет первое значение для первого идентификатора и первого цикла (desp_housing) и добавляет со всеми входами других таблиц ... –

Смежные вопросы