Много SUM() из многих таблиц

slip

Guest
Много SUM() из многих таблиц

Чего то не могу понять, у меня есть скажем 3 таблицы, мне нужно получить из всех 3х SUM() разных полей, примерно так:

SELECT SUM(table1.pole1) t1, SUM(table2.pole1) t2, SUM(table3.pole1) t3 FROM table1, table2, table3

Результат странный выводит очень, совсем не сумма полей которые указанны. Некоторые поля умножаются на 3. Как быть? Что читать? :) Пробовал GROUP BY, все равно чушь выходит...
 

slip

Guest
Плохо, таких таблиц на самом деле больше, а это уже не 3 запроса....
 

Сергей123

Новичок
Тебе нужно меньше запросов с какой целью?
FROM table1, table2, table3 - это таблица с миллионом записей, если, например, в каждой из трёх их по сто...
А у тебя больше.
Рассказывай подробнее задачу или делай X запросов, по-моему.
 

slip

Guest
Меньше запросов? Во первых интересно как так сделать, во вторых
это таблица с миллионом записей, если, например, в каждой из трёх их по сто...
А у тебя больше.
вот именно, теперь представь что мы каждый раз делаем новый запрос вместо одного.

Задача проса, получить SUM() многих полей из разных таблиц 1 запросом...

А все, понял...как то с начало не догадатся...Вложенные SELECT:

SELECT SUM(table1.pole1) t1, (SELECT SUM(table2.pole1) FROM table2) t2, (SELECT SUM(table3.pole1) FROM table3) t3 FROM table1

-~{}~ 21.07.05 17:53:

У кого нить есть еще идеи как это сделать скажем в версии более ранней чем 4.1??
 

Profic

just Profic (PHP5 BetaTeam)
slip
Ты не понял.
При условии, что у тебя в каждой таблице по 100 записей ты заставляешь MySQL перелопачивать полное декартово произведение этих таблиц, а это есть 100^3 = 100*100*100 = 1000000, т.е. миллион записей. В то время как 3 запроса прошерстят всего 100*3 = 300 записей. А поскольку ты говоришь, что таблицы у тебя большие и много, то сам представь порядок кол-ва строк.
Более того, вложенные селекты произведут те же 3 запроса, которых ты так не хочешь. Как и мой вариант, который я дальше предложу.
Если эта операция часта, то полученные один раз данные нужно кешировать. Или иметь отдельную таблицу с суммами и при любых операциях с таблицей поддерживать актуальность суммы для данной таблицы.
Ну и на последок - мой вариант: mysql.com/UNION, который, повторюсь, выполнит те же 3 запроса, но вернет все в одном resultset-е. Если муська меньше 4.0 - то только кеширование/отдельная таблица/три запроса.
 
Сверху