Общее кол-во при 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д