SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 16.02.2013 02:41:44

terraman
Участник
Зарегистрирован: 30.05.2011
Сообщений: 4

несколько join и несколько sum() это возможно?

Приветствую вас!
Сразу к сути:

select t1.id, sum(t2.val), sum(t3.val) from t1 join t2 on(t1.id = t2.id) join t3 on(t1.id = t3.id) where t1.id = 3;


Вобщем в таблице t1 записи с уникальным идентификатором, в таблицах t2 и t3 много записей и их идентификаторы не являются уникальными и соответственно для записи из таблицы t1 в них может содержаться несколько записей.

Надеюсь из примера понятно что я хочу получить id из первой таблицы и сумму значений из записей во второй и третей для этого id. Этот код не работает и я понимаю почему, вопрос в другом можно ли решить эту задачу с помощью join?

PS Благодарю за внимание!

Неактивен

 

#2 16.02.2013 08:30:42

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: несколько join и несколько sum() это возможно?

Добавьте перед where
GROUP BY t1.id

Правда непонятно, а зачем Вам получать из базы t1.id, если Вы и так знаете, что он равен 3?
Не проще ли в этом случае выкинуть t1.id из списка в SELECT? В этом случае и группировать по t1.id не придётся.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 16.02.2013 13:23:26

terraman
Участник
Зарегистрирован: 30.05.2011
Сообщений: 4

Re: несколько join и несколько sum() это возможно?

И снова здравствуйте!
Благодарю за ответ, однако я пробовал использовать group by это не работает сейчас попробовал ещё раз, не работает, точнее он возвращает, но не правильные результаты. Попробую обяснить как это происходит в моём понимании: В таблице t1 много записей число 3 приведено для примера, также в ней более 10 столбцов и в реальном запросе я извлекаю почти все значения этих столбцов для конкретного идентификатора указанного в блоке where. в результате я получаю одну запись так как извлекаю по id а он с уникальным индексом, далее join t2 в которой для текущего идентификатора может быть несколько записей, допустим их две без использования агрегатных функций в выдаче я получю две записи, если сейчас выполнить sum() то всё корректно в выдаче будет одна запись в которой значения из t2 суммированы. Если же не делать sum(), а сделать join t3 то к двум записям добавятся записи из таблицы t3 например их там тоже две в результате будет 4 записи две из таблицы t2 и две из таблицы t3 все недостающие значения просто тиражируются поэтому применив sum() получается двухкратное преувеличение.

Неактивен

 

#4 16.02.2013 17:32:15

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: несколько join и несколько sum() это возможно?

Приведите таблицы t1,t2 иt3 (структуру), небольшое количество данных к ним,
тот набор, что возвращает запрос с group by и тот набор, который Вы хотели бы получить.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson