Общее кол-во при left join - MySQL
Формулировка задачи:
Есть таблицы:
Необходимо для каждого товара выбирать остаток со склада.
Выбирать как для конкретного склада:
Так и общее кол-во на всех складах, вот собственно с общим количеством проблема, как посчитать для каждой записи?
CREATE TABLE `table` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL DEFAULT '',
`value` VARCHAR(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
CREATE TABLE `table_ostatok` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`id_good` INT(11) NOT NULL DEFAULT '0',
`id_sklad` INT(11) NOT NULL DEFAULT '0',
`count` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
INSERT INTO `table` (`name`,`value`) VALUES
('tovar1','kofe'),
('tovar2','moloko');
INSERT INTO `table_ostatok` (`id_good`,`id_sklad`,`count`) VALUES
('1', '1', '5'),
('1', '2', '3'),
('2', '1', '1'),
('2', '2', '4'),
('2', '3', '5');SELECT
`table`.*, `table_ostatok`.`count`
FROM
`table`
LEFT JOIN
`table_ostatok`
ON `table_ostatok`.`id_good` = `table`.`id`
AND `table_ostatok`.`id_sklad` = '1'
т.е. для запроса где конкретно указан склад выберет результат:
1 | tovar1 | kofe | 5
2 | tovar2 | moloko | 1
а вот как выбрать так чтобы:
1 | tovar1 | kofe | 5 + 3
2 | tovar2 | moloko | 1 + 4 + 5
Решение задачи: «Общее кол-во при left join»
textual
Листинг программы
SELECT `table`.id, `table`.`name`, `table`.`value`, SUM(table_ostatok.`count`) FROM `table` LEFT JOIN table_ostatok ON table_ostatok.id_good = `table`.id GROUP BY `table`.id
Объяснение кода листинга программы
В данном коде выполняется запрос к базе данных с использованием SQL-оператора SELECT. Весь запрос состоит из нескольких частей, которые можно разделить на следующие элементы:
- SELECT - указывает, какие столбцы нужно извлечь из таблицы.
table.id,table.name,table.value- указывают, какие конкретно столбцы из таблицыtableнужно извлечь.- SUM(table_ostatok.
count) - используется функция SUM, которая суммирует значения столбцаcountиз таблицыtable_ostatok. - FROM
table- указывает, из какой таблицы нужно извлекать данные. - LEFT JOIN table_ostatok ON table_ostatok.id_good =
table.id - используется оператор JOIN для объединения двух таблиц по значению столбцаid_goodиз таблицыtable_ostatokи любой строки из таблицыtable. - GROUP BY
table.id - используется оператор GROUP BY для группировки строк по значению столбцаidиз таблицыtable. Таким образом, данный запрос извлекает из таблицыtableстолбцыid,nameиvalue, а также суммирует значения столбцаcountиз таблицыtable_ostatok, при этом объединяя строки из обеих таблиц по значению столбцаid_good. Результат будет содержать только уникальные записи из таблицыtable, сгруппированные по значению столбцаid.