2015-11-17 5 views
0

У меня есть две таблицы. They are in Heidi мне нужна таблица, как: RezultКак оптимизировать внутреннее соединение

Стараюсь следующий SELECT:

SELECT accounts.name, accounts.account_id,date, 
    (case when accounts.account_id = results.account_id then date end) AS Dat, 
results.account_id 
FROM results 
INNER JOIN accounts 
group by date,dat,name 
order by accounts.account_id ,date 

Но у меня есть лишние поля. помогите избавиться от них.

Дополнительно: Я должен показать таблицу, как это:

--------------------01.2010----02.2010-----03.2010---nextDate 

Revenues ----------'x'------------'x'---------'null'--------------------- 

Personal Costs-----'x'------------'x'---------'x'--------------------- 

Amortisation---------'x'------------'x'---------'null'--------------------- 

Summa---------------'3x'-----------'3x'---------'1x'--------------------- 

Я использую следующий выбор:

SELECT 
GROUP_CONCAT(revenues SEPARATOR ';')as Renenues, 
GROUP_CONCAT(personal SEPARATOR ';')as Personal, 
GROUP_CONCAT(amortisation SEPARATOR ';')as Amortisation 
from (SELECT date, 
sum(case when accounts.account_id = 1 then 1 else 0 end) as revenues, 
sum(case when accounts.account_id = 2 then 1 else 0 end) as personal , 
sum(case when accounts.account_id = 3 then 1 else 0 end) as amortisation 
from accounts 
left JOIN results on accounts.account_id = results.account_id 
group by date 
) t 
UNION ALL 
SELECT 
sum(case when results.account_id = 1 then 1 ELSE 0 end) , 
sum(case when results.account_id = 2 then 1 else 0 end) , 
sum(case when results.account_id = 3 then 1 else 0 end) 
from results 

Тогда я покажу строку таблицы из моей строки: 'GROUP_CONCAT'. Можно сделать так, чтобы SELECT не знал номер «accounts.account_id» или оптимизировал этот SELECT? Я пробовал первый SELECT, но получаю много ненужной информации.

ответ

0

Вы должны изменить свой запрос, чтобы быть как

SELECT accounts.name, 
accounts.account_id as accounts_account_id, 
accounts.date, 
results.account_id as results_account_id 
FROM results 
LEFT JOIN accounts ON accounts.account_id = results.account_id 
group by accounts.date,accounts.name 
order by accounts.account_id ,accounts.date; 
+0

это не работает. Мне нужно «Null» volue, когда нет «даты» для некоторых учетных записей. – user3205692

+0

@ user3205692, а затем просто измените с INNER JOIN на LEFT JOIN – DRapp

+0

@ user3205692, в этом случае используйте LEFT OUTER JOIN. См. Редактирование в ответ. – Rahul