Задавайте вопросы, мы ответим
Вы не зашли.
Во вложении дамп таблиц.
Использую примерно такой запрос:
SELECT `id`, `name`, COALESCE(`tbl2_sum`.`sum`, 0) AS `sum` FROM `tbl1` LEFT JOIN (SELECT `pid`, SUM(`sum`) AS `sum` FROM `tbl2` GROUP BY `pid`) AS `tbl2_sum` ON `tbl2_sum`.`pid` = `tbl1`.`id`
Как избавиться от вложенного запроса, получая тот же результат выборки?
Неактивен
Вложения нету, к сожалению.
А способ "в лоб" чем не подходит? Честно говоря, не вижу, почему бы ему
выдавать другой результат...
SELECT t1.id, t1.name, SUM(t2.sum)
FROM tbl1 t1
LEFT JOIN tbl2 t2 ON t2.pid = t1.id
GROUP BY t2.pid
Неактивен
Вроде бы в лоб не проходит. Может быть несколько записей из t1 для одной записи из t2, поэтому сумма "в лоб" будет больше в ряде случаев.
Неактивен
Не понимаю. Группировка идет независимо все равно. Можешь привести пример
с данными?
Неактивен
Неактивен
Да, согласен. Получается, что группируем по a, если одновременно группировать
и присоединять
Без подзапроса не удается. Пока по крайней мере
А в оригинальных данных нету, случаем, уникальности на первой табличке по id?
Неактивен
Извиняюсь, дамп вроде крепил, но он куда то потерялся. Сейчас ещё раз пробуем.
UPD
Кажется понял в чём дело, это из-за "предварительного просмотра" upload-форма сбрасывается.
UPD2
Ещё лучше...
Error: Unable to move file from: /home/sqlinfo.ru/tmp/phpe6eYRJ to /home/sqlinfo.ru/htdocs/forum/attach_dir/9f1a745fec1cf0394e212e87b2586e42/7315c21d0a86c02e86601222425df523.attach.
UPD3
Сюда выложил
Неактивен
paulus написал:
А в оригинальных данных нету, случаем, уникальности на первой табличке по id?
Случайно есть `id` в обоих таблицах - первичные ключи.
Неактивен
Таки уникальный ключик есть!
mysql> SELECT tbl1.id, name, SUM(IFNULL(tbl2.sum,0)) FROM tbl1 LEFT JOIN tbl2 ON tbl2.pid = tbl1.id GROUP BY pid, id ORDER BY id; +----+-----------------+-------------------------+ | id | name | SUM(IFNULL(tbl2.sum,0)) | +----+-----------------+-------------------------+ | 1 | запись 01 | 177 | | 2 | запись 02 | 267 | | 3 | запись 03 | 158 | | 4 | запись 04 | 0 | | 5 | запись 05 | 0 | | 6 | запись 06 | 193 | | 7 | запись 07 | 258 | | 8 | запись 08 | 0 | | 9 | запись 09 | 291 | | 10 | запись 10 | 0 | +----+-----------------+-------------------------+ 10 rows in set (0.00 sec)
Неактивен
Странно.. всегда представлял, что подобный запрос выберет кол-во записей, равное кол-ву записей в таблице `tbl1` с прикреплением одной произвольной записи с `tbl2`.`pid` = `tbl1`.`id` из `tbl2`. Теперь маленько запутался в устройстве JOIN'ов.
SELECT `tbl1`.`id`, `name` ,`tbl2`.`id` FROM `tbl1` LEFT JOIN `tbl2` ON `tbl2`.`pid` = `tbl1`.`id`
Неактивен
Нет, не одной произвольной, а всех доступных по условию объединения.
Неактивен
Возможно файл не прикрепился из-за ограничения по размеру
Неактивен
rgbeast написал:
Возможно файл не прикрепился из-за ограничения по размеру
Вот этот файл крепил, 2.3 кб. Не думаю, что у вас такое маленькое ограничение..
Сейчас попробовал, тоже самое:
An error was encountered Error: Unable to move file from: /home/sqlinfo.ru/tmp/phpr9aJvN to /home/sqlinfo.ru/htdocs/forum/attach_dir/9f1a745fec1cf0394e212e87b2586e42/11130d88ad2d98c894744f8d2ca61a89.attach.
Спасибо за ответы, хороший форум
Отредактированно coin (15.07.2008 21:31:07)
Неактивен