2016-10-12 2 views
0

У меня есть две таблицы. (Ниже приведены примеры таблиц. Изначально у меня есть 6 таблиц), которые присоединяются к использованию - mysql

Таблица cpp;

---------------------- 
| name | spent1 | 
---------------------- 
|john  | 32  | 
|Johny | 2  | 
---------------------- 

Таблица ява

---------------------- 
| name | spent2 | 
---------------------- 
|mary  | 42  | 
|Johny | 2  | 
---------------------- 

Вывод, что я хочу, как

--------------------------------- 
| name | spent1 | spent2 | 
--------------------------------- 
|john  | 32  | null | 
|Johny | 2  | 2  | 
|mary  | null | 42  | 
--------------------------------- 

Я пробовал много вещей, и не могли получить ответ. Может кто-нибудь предложить мне присоединиться к mysql, чтобы получить желаемый результат.

+0

перепроектировать схему. – Drew

+0

Можете ли вы быть более изобретательны? – Pawan

+0

Сколько может стоить john в вашей системе? Вы хотите, чтобы ваши запросы были получены из плохих объединений или профсоюзов? Как это? – Drew

ответ

0

Вы можете достичь этого путем объединения двух запросов

select Table1.name as name , Table1.spent as spent1 , Table2.spent as spent2 from Table1 
Left JOIN Table2 on Table1.name = Table2.name 
union 
select Table2.name as name , Table1.spent as spent1 , Table2.spent as spent2 from Table2 
Left JOIN Table1 on Table1.name = Table2.name 
ORDER BY name 

Обратите внимание, что, просто указав UNION с ALL - дубликат записи для Johny автоматически удаляется.

+0

для двух таблиц это нормально. но у меня есть 6 таблиц – Pawan

+0

К сожалению, без редизайна схемы есть мало возможностей – PaulF

0

без перепроектирования схемы (вероятно, ваш лучший вариант) можно создать временную таблицу & запрос, - следующий легко следует продлить до шести таблиц:

drop temporary table if exists temp; 
create temporary table temp ENGINE=MEMORY as (select * from 
    (select name, spent1, null as spent2, null as spent3, .... from Table1 
    union 
    select name, null, spent2, null, .... from Table2 
    union 
    select name, null, null, spent3, .... from Table3 
    ..... 
) a); 
select name, sum(spent1), sum(spent2), sum(spent3), .... 
from temp 
group by name; 
Смежные вопросы